11// Take a look at the license at the top of the repository in the LICENSE file.
22
33#[ cfg( unix) ]
4- use std:: os:: unix:: io:: { AsRawFd , IntoRawFd , RawFd } ;
4+ use std:: os:: unix:: io:: { AsFd , AsRawFd , BorrowedFd , FromRawFd , IntoRawFd , OwnedFd , RawFd } ;
55use std:: { mem, ptr} ;
66
77use glib:: { prelude:: * , translate:: * } ;
88#[ cfg( all( not( unix) , docsrs) ) ]
9- use socket:: { AsRawFd , IntoRawFd , RawFd } ;
9+ use socket:: { AsFd , AsRawFd , BorrowedFd , FromRawFd , IntoRawFd , OwnedFd , RawFd } ;
1010
1111use crate :: { ffi, UnixFDList } ;
1212
@@ -25,12 +25,12 @@ impl UnixFDList {
2525
2626pub trait UnixFDListExtManual : IsA < UnixFDList > + Sized {
2727 #[ doc( alias = "g_unix_fd_list_append" ) ]
28- fn append < T : AsRawFd > ( & self , fd : T ) -> Result < i32 , glib:: Error > {
28+ fn append ( & self , fd : impl AsFd ) -> Result < i32 , glib:: Error > {
2929 unsafe {
3030 let mut error = ptr:: null_mut ( ) ;
3131 let ret = ffi:: g_unix_fd_list_append (
3232 self . as_ref ( ) . to_glib_none ( ) . 0 ,
33- fd. as_raw_fd ( ) ,
33+ fd. as_fd ( ) . as_raw_fd ( ) ,
3434 & mut error,
3535 ) ;
3636 if error. is_null ( ) {
@@ -42,39 +42,41 @@ pub trait UnixFDListExtManual: IsA<UnixFDList> + Sized {
4242 }
4343
4444 #[ doc( alias = "g_unix_fd_list_get" ) ]
45- fn get ( & self , index_ : i32 ) -> Result < RawFd , glib:: Error > {
45+ fn get ( & self , index_ : i32 ) -> Result < OwnedFd , glib:: Error > {
4646 unsafe {
4747 let mut error = ptr:: null_mut ( ) ;
48- let ret = ffi:: g_unix_fd_list_get ( self . as_ref ( ) . to_glib_none ( ) . 0 , index_, & mut error) ;
48+ let raw_fd =
49+ ffi:: g_unix_fd_list_get ( self . as_ref ( ) . to_glib_none ( ) . 0 , index_, & mut error) ;
50+ let fd = OwnedFd :: from_raw_fd ( raw_fd) ;
4951 if error. is_null ( ) {
50- Ok ( ret )
52+ Ok ( fd )
5153 } else {
5254 Err ( from_glib_full ( error) )
5355 }
5456 }
5557 }
5658
5759 #[ doc( alias = "g_unix_fd_list_peek_fds" ) ]
58- fn peek_fds ( & self ) -> Vec < RawFd > {
60+ fn peek_fds ( & self ) -> & [ BorrowedFd < ' _ > ] {
5961 unsafe {
6062 let mut length = mem:: MaybeUninit :: uninit ( ) ;
61- let ret = FromGlibContainer :: from_glib_none_num (
62- ffi:: g_unix_fd_list_peek_fds ( self . as_ref ( ) . to_glib_none ( ) . 0 , length. as_mut_ptr ( ) ) ,
63+ std:: slice:: from_raw_parts (
64+ ffi:: g_unix_fd_list_peek_fds ( self . as_ref ( ) . to_glib_none ( ) . 0 , length. as_mut_ptr ( ) )
65+ as * const BorrowedFd ,
6366 length. assume_init ( ) as usize ,
64- ) ;
65- ret
67+ )
6668 }
6769 }
6870
6971 #[ doc( alias = "g_unix_fd_list_steal_fds" ) ]
70- fn steal_fds ( & self ) -> Vec < RawFd > {
72+ fn steal_fds ( & self ) -> Vec < OwnedFd > {
7173 unsafe {
7274 let mut length = mem:: MaybeUninit :: uninit ( ) ;
73- let ret = FromGlibContainer :: from_glib_full_num (
75+ let ret: Vec < RawFd > = FromGlibContainer :: from_glib_full_num (
7476 ffi:: g_unix_fd_list_steal_fds ( self . as_ref ( ) . to_glib_none ( ) . 0 , length. as_mut_ptr ( ) ) ,
7577 length. assume_init ( ) as usize ,
7678 ) ;
77- ret
79+ ret. into_iter ( ) . map ( |fd| OwnedFd :: from_raw_fd ( fd ) ) . collect ( )
7880 }
7981 }
8082}
0 commit comments