@@ -7,7 +7,7 @@ use std::boxed::Box as Box_;
7
7
use std:: mem;
8
8
#[ cfg( not( windows) ) ]
9
9
#[ cfg( feature = "v2_58" ) ]
10
- use std:: os:: unix:: io:: AsRawFd ;
10
+ use std:: os:: unix:: io:: { AsFd , AsRawFd } ;
11
11
#[ cfg( not( windows) ) ]
12
12
use std:: os:: unix:: io:: { FromRawFd , IntoRawFd , RawFd } ;
13
13
use std:: ptr;
@@ -24,15 +24,15 @@ use crate::{Error, Pid, SpawnFlags};
24
24
#[ cfg_attr( docsrs, doc( cfg( all( feature = "v2_58" , not( windows) ) ) ) ) ]
25
25
#[ allow( clippy:: too_many_arguments) ]
26
26
#[ doc( alias = "g_spawn_async_with_fds" ) ]
27
- pub fn spawn_async_with_fds < P : AsRef < std:: path:: Path > , T : AsRawFd , U : AsRawFd , V : AsRawFd > (
27
+ pub fn spawn_async_with_fds < P : AsRef < std:: path:: Path > > (
28
28
working_directory : P ,
29
29
argv : & [ & str ] ,
30
30
envp : & [ & str ] ,
31
31
flags : SpawnFlags ,
32
32
child_setup : Option < Box_ < dyn FnOnce ( ) + ' static > > ,
33
- stdin_fd : T ,
34
- stdout_fd : U ,
35
- stderr_fd : V ,
33
+ stdin_fd : Option < impl AsFd > ,
34
+ stdout_fd : Option < impl AsFd > ,
35
+ stderr_fd : Option < impl AsFd > ,
36
36
) -> Result < Pid , Error > {
37
37
let child_setup_data: Box_ < Option < Box_ < dyn FnOnce ( ) + ' static > > > = Box_ :: new ( child_setup) ;
38
38
unsafe extern "C" fn child_setup_func ( user_data : ffi:: gpointer ) {
@@ -47,6 +47,9 @@ pub fn spawn_async_with_fds<P: AsRef<std::path::Path>, T: AsRawFd, U: AsRawFd, V
47
47
None
48
48
} ;
49
49
let super_callback0: Box_ < Option < Box_ < dyn FnOnce ( ) + ' static > > > = child_setup_data;
50
+ let stdin_raw_fd = stdin_fd. map_or ( -1 , |fd| fd. as_fd ( ) . as_raw_fd ( ) ) ;
51
+ let stdout_raw_fd = stdout_fd. map_or ( -1 , |fd| fd. as_fd ( ) . as_raw_fd ( ) ) ;
52
+ let stderr_raw_fd = stderr_fd. map_or ( -1 , |fd| fd. as_fd ( ) . as_raw_fd ( ) ) ;
50
53
unsafe {
51
54
let mut child_pid = mem:: MaybeUninit :: uninit ( ) ;
52
55
let mut error = ptr:: null_mut ( ) ;
@@ -58,9 +61,9 @@ pub fn spawn_async_with_fds<P: AsRef<std::path::Path>, T: AsRawFd, U: AsRawFd, V
58
61
child_setup,
59
62
Box_ :: into_raw ( super_callback0) as * mut _ ,
60
63
child_pid. as_mut_ptr ( ) ,
61
- stdin_fd . as_raw_fd ( ) ,
62
- stdout_fd . as_raw_fd ( ) ,
63
- stderr_fd . as_raw_fd ( ) ,
64
+ stdin_raw_fd ,
65
+ stdout_raw_fd ,
66
+ stderr_raw_fd ,
64
67
& mut error,
65
68
) ;
66
69
let child_pid = from_glib ( child_pid. assume_init ( ) ) ;
0 commit comments