1
1
// Take a look at the license at the top of the repository in the LICENSE file.
2
2
3
3
#[ cfg( unix) ]
4
- use std:: os:: unix:: io:: { AsRawFd , IntoRawFd , RawFd } ;
4
+ use std:: os:: unix:: io:: { AsFd , AsRawFd , BorrowedFd , FromRawFd , IntoRawFd , OwnedFd , RawFd } ;
5
5
use std:: { mem, ptr} ;
6
6
7
7
use glib:: { prelude:: * , translate:: * } ;
8
8
#[ cfg( all( not( unix) , docsrs) ) ]
9
- use socket:: { AsRawFd , IntoRawFd , RawFd } ;
9
+ use socket:: { AsFd , AsRawFd , BorrowedFd , FromRawFd , IntoRawFd , OwnedFd , RawFd } ;
10
10
11
11
use crate :: { ffi, UnixFDList } ;
12
12
@@ -30,12 +30,12 @@ mod sealed {
30
30
31
31
pub trait UnixFDListExtManual : sealed:: Sealed + IsA < UnixFDList > + Sized {
32
32
#[ doc( alias = "g_unix_fd_list_append" ) ]
33
- fn append < T : AsRawFd > ( & self , fd : T ) -> Result < i32 , glib:: Error > {
33
+ fn append ( & self , fd : impl AsFd ) -> Result < i32 , glib:: Error > {
34
34
unsafe {
35
35
let mut error = ptr:: null_mut ( ) ;
36
36
let ret = ffi:: g_unix_fd_list_append (
37
37
self . as_ref ( ) . to_glib_none ( ) . 0 ,
38
- fd. as_raw_fd ( ) ,
38
+ fd. as_fd ( ) . as_raw_fd ( ) ,
39
39
& mut error,
40
40
) ;
41
41
if error. is_null ( ) {
@@ -47,39 +47,41 @@ pub trait UnixFDListExtManual: sealed::Sealed + IsA<UnixFDList> + Sized {
47
47
}
48
48
49
49
#[ doc( alias = "g_unix_fd_list_get" ) ]
50
- fn get ( & self , index_ : i32 ) -> Result < RawFd , glib:: Error > {
50
+ fn get ( & self , index_ : i32 ) -> Result < OwnedFd , glib:: Error > {
51
51
unsafe {
52
52
let mut error = ptr:: null_mut ( ) ;
53
- let ret = ffi:: g_unix_fd_list_get ( self . as_ref ( ) . to_glib_none ( ) . 0 , index_, & mut error) ;
53
+ let raw_fd =
54
+ ffi:: g_unix_fd_list_get ( self . as_ref ( ) . to_glib_none ( ) . 0 , index_, & mut error) ;
55
+ let fd = OwnedFd :: from_raw_fd ( raw_fd) ;
54
56
if error. is_null ( ) {
55
- Ok ( ret )
57
+ Ok ( fd )
56
58
} else {
57
59
Err ( from_glib_full ( error) )
58
60
}
59
61
}
60
62
}
61
63
62
64
#[ doc( alias = "g_unix_fd_list_peek_fds" ) ]
63
-
64
- fn peek_fds ( & self ) -> Vec < RawFd > {
65
+ fn peek_fds ( & self ) -> & [ BorrowedFd < ' _ > ] {
65
66
unsafe {
66
67
let mut length = mem:: MaybeUninit :: uninit ( ) ;
67
- let ret = FromGlibContainer :: from_glib_none_num (
68
- ffi:: g_unix_fd_list_peek_fds ( self . as_ref ( ) . to_glib_none ( ) . 0 , length. as_mut_ptr ( ) ) ,
68
+ std:: slice:: from_raw_parts (
69
+ ffi:: g_unix_fd_list_peek_fds ( self . as_ref ( ) . to_glib_none ( ) . 0 , length. as_mut_ptr ( ) )
70
+ as * const BorrowedFd ,
69
71
length. assume_init ( ) as usize ,
70
- ) ;
71
- ret
72
+ )
72
73
}
73
74
}
75
+
74
76
#[ doc( alias = "g_unix_fd_list_steal_fds" ) ]
75
- fn steal_fds ( & self ) -> Vec < RawFd > {
77
+ fn steal_fds ( & self ) -> Vec < OwnedFd > {
76
78
unsafe {
77
79
let mut length = mem:: MaybeUninit :: uninit ( ) ;
78
- let ret = FromGlibContainer :: from_glib_full_num (
80
+ let ret: Vec < RawFd > = FromGlibContainer :: from_glib_full_num (
79
81
ffi:: g_unix_fd_list_steal_fds ( self . as_ref ( ) . to_glib_none ( ) . 0 , length. as_mut_ptr ( ) ) ,
80
82
length. assume_init ( ) as usize ,
81
83
) ;
82
- ret
84
+ ret. into_iter ( ) . map ( |fd| OwnedFd :: from_raw_fd ( fd ) ) . collect ( )
83
85
}
84
86
}
85
87
}
0 commit comments