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
@@ -25,12 +25,12 @@ impl UnixFDList {
25
25
26
26
pub trait UnixFDListExtManual : IsA < UnixFDList > + Sized {
27
27
#[ 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 > {
29
29
unsafe {
30
30
let mut error = ptr:: null_mut ( ) ;
31
31
let ret = ffi:: g_unix_fd_list_append (
32
32
self . as_ref ( ) . to_glib_none ( ) . 0 ,
33
- fd. as_raw_fd ( ) ,
33
+ fd. as_fd ( ) . as_raw_fd ( ) ,
34
34
& mut error,
35
35
) ;
36
36
if error. is_null ( ) {
@@ -42,39 +42,41 @@ pub trait UnixFDListExtManual: IsA<UnixFDList> + Sized {
42
42
}
43
43
44
44
#[ 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 > {
46
46
unsafe {
47
47
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) ;
49
51
if error. is_null ( ) {
50
- Ok ( ret )
52
+ Ok ( fd )
51
53
} else {
52
54
Err ( from_glib_full ( error) )
53
55
}
54
56
}
55
57
}
56
58
57
59
#[ doc( alias = "g_unix_fd_list_peek_fds" ) ]
58
- fn peek_fds ( & self ) -> Vec < RawFd > {
60
+ fn peek_fds ( & self ) -> & [ BorrowedFd < ' _ > ] {
59
61
unsafe {
60
62
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 ,
63
66
length. assume_init ( ) as usize ,
64
- ) ;
65
- ret
67
+ )
66
68
}
67
69
}
68
70
69
71
#[ doc( alias = "g_unix_fd_list_steal_fds" ) ]
70
- fn steal_fds ( & self ) -> Vec < RawFd > {
72
+ fn steal_fds ( & self ) -> Vec < OwnedFd > {
71
73
unsafe {
72
74
let mut length = mem:: MaybeUninit :: uninit ( ) ;
73
- let ret = FromGlibContainer :: from_glib_full_num (
75
+ let ret: Vec < RawFd > = FromGlibContainer :: from_glib_full_num (
74
76
ffi:: g_unix_fd_list_steal_fds ( self . as_ref ( ) . to_glib_none ( ) . 0 , length. as_mut_ptr ( ) ) ,
75
77
length. assume_init ( ) as usize ,
76
78
) ;
77
- ret
79
+ ret. into_iter ( ) . map ( |fd| OwnedFd :: from_raw_fd ( fd ) ) . collect ( )
78
80
}
79
81
}
80
82
}
0 commit comments