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) , feature = "dox" ) ) ]
9
- use socket:: { AsRawFd , IntoRawFd , RawFd } ;
9
+ use socket:: { AsFd , AsRawFd , BorrowedFd , FromRawFd , IntoRawFd , OwnedFd , RawFd } ;
10
10
11
11
use crate :: UnixFDList ;
12
12
@@ -25,25 +25,25 @@ impl UnixFDList {
25
25
26
26
pub trait UnixFDListExtManual : 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 < T : AsFd > ( & self , fd : & T ) -> Result < i32 , glib:: Error > ;
29
29
30
30
#[ doc( alias = "g_unix_fd_list_get" ) ]
31
- fn get ( & self , index_ : i32 ) -> Result < RawFd , glib:: Error > ;
31
+ fn get ( & self , index_ : i32 ) -> Result < OwnedFd , glib:: Error > ;
32
32
33
33
#[ doc( alias = "g_unix_fd_list_peek_fds" ) ]
34
- fn peek_fds ( & self ) -> Vec < RawFd > ;
34
+ fn peek_fds ( & self ) -> Vec < BorrowedFd < ' _ > > ;
35
35
36
36
#[ doc( alias = "g_unix_fd_list_steal_fds" ) ]
37
- fn steal_fds ( & self ) -> Vec < RawFd > ;
37
+ fn steal_fds ( & self ) -> Vec < OwnedFd > ;
38
38
}
39
39
40
40
impl < O : IsA < UnixFDList > > UnixFDListExtManual for O {
41
- fn append < T : AsRawFd > ( & self , fd : T ) -> Result < i32 , glib:: Error > {
41
+ fn append < T : AsFd > ( & self , fd : & T ) -> Result < i32 , glib:: Error > {
42
42
unsafe {
43
43
let mut error = ptr:: null_mut ( ) ;
44
44
let ret = ffi:: g_unix_fd_list_append (
45
45
self . as_ref ( ) . to_glib_none ( ) . 0 ,
46
- fd. as_raw_fd ( ) ,
46
+ fd. as_fd ( ) . as_raw_fd ( ) ,
47
47
& mut error,
48
48
) ;
49
49
if error. is_null ( ) {
@@ -54,37 +54,41 @@ impl<O: IsA<UnixFDList>> UnixFDListExtManual for O {
54
54
}
55
55
}
56
56
57
- fn get ( & self , index_ : i32 ) -> Result < RawFd , glib:: Error > {
57
+ fn get ( & self , index_ : i32 ) -> Result < OwnedFd , glib:: Error > {
58
58
unsafe {
59
59
let mut error = ptr:: null_mut ( ) ;
60
- let ret = ffi:: g_unix_fd_list_get ( self . as_ref ( ) . to_glib_none ( ) . 0 , index_, & mut error) ;
60
+ let raw_fd =
61
+ ffi:: g_unix_fd_list_get ( self . as_ref ( ) . to_glib_none ( ) . 0 , index_, & mut error) ;
62
+ let fd = OwnedFd :: from_raw_fd ( raw_fd) ;
61
63
if error. is_null ( ) {
62
- Ok ( ret )
64
+ Ok ( fd )
63
65
} else {
64
66
Err ( from_glib_full ( error) )
65
67
}
66
68
}
67
69
}
68
70
69
- fn peek_fds ( & self ) -> Vec < RawFd > {
71
+ fn peek_fds ( & self ) -> Vec < BorrowedFd < ' _ > > {
70
72
unsafe {
71
73
let mut length = mem:: MaybeUninit :: uninit ( ) ;
72
- let ret = FromGlibContainer :: from_glib_none_num (
74
+ let ret: Vec < RawFd > = FromGlibContainer :: from_glib_none_num (
73
75
ffi:: g_unix_fd_list_peek_fds ( self . as_ref ( ) . to_glib_none ( ) . 0 , length. as_mut_ptr ( ) ) ,
74
76
length. assume_init ( ) as usize ,
75
77
) ;
76
- ret
78
+ ret. into_iter ( )
79
+ . map ( |fd| BorrowedFd :: borrow_raw ( fd) )
80
+ . collect ( )
77
81
}
78
82
}
79
83
80
- fn steal_fds ( & self ) -> Vec < RawFd > {
84
+ fn steal_fds ( & self ) -> Vec < OwnedFd > {
81
85
unsafe {
82
86
let mut length = mem:: MaybeUninit :: uninit ( ) ;
83
- let ret = FromGlibContainer :: from_glib_full_num (
87
+ let ret: Vec < RawFd > = FromGlibContainer :: from_glib_full_num (
84
88
ffi:: g_unix_fd_list_steal_fds ( self . as_ref ( ) . to_glib_none ( ) . 0 , length. as_mut_ptr ( ) ) ,
85
89
length. assume_init ( ) as usize ,
86
90
) ;
87
- ret
91
+ ret. into_iter ( ) . map ( |fd| OwnedFd :: from_raw_fd ( fd ) ) . collect ( )
88
92
}
89
93
}
90
94
}
0 commit comments