@@ -35,6 +35,14 @@ pub type Elf64_Xword = u64;
3535
3636pub type iconv_t = * mut :: c_void ;
3737
38+ e ! {
39+ pub enum fae_action {
40+ FAE_OPEN ,
41+ FAE_DUP2 ,
42+ FAE_CLOSE ,
43+ }
44+ }
45+
3846cfg_if ! {
3947 if #[ cfg( target_pointer_width = "64" ) ] {
4048 type Elf_Addr = Elf64_Addr ;
@@ -497,6 +505,39 @@ s! {
497505 pub kve_vn_mode: u32 ,
498506 pub kve_path: [ [ :: c_char; 32 ] ; 32 ] ,
499507 }
508+
509+ pub struct __c_anonymous_posix_spawn_fae_open {
510+ pub path: * mut :: c_char,
511+ pub oflag: :: c_int,
512+ pub mode: :: mode_t,
513+ }
514+
515+ pub struct __c_anonymous_posix_spawn_fae_dup2 {
516+ pub newfildes: :: c_int,
517+ }
518+
519+ pub struct posix_spawnattr_t {
520+ pub sa_flags: :: c_short,
521+ pub sa_pgroup: :: pid_t,
522+ pub sa_schedparam: sched_param,
523+ pub sa_schedpolicy: :: c_int,
524+ pub sa_sigdefault: sigset_t,
525+ pub sa_sigmask: sigset_t,
526+ }
527+
528+ pub struct posix_spawn_file_actions_entry_t {
529+ pub fae_action: fae_action,
530+ pub fae_fildes: :: c_int,
531+ #[ cfg( libc_union) ]
532+ pub fae_data: __c_anonymous_posix_spawn_fae,
533+ }
534+
535+ pub struct posix_spawn_file_actions_t {
536+ pub size: :: c_uint,
537+ pub len: :: c_uint,
538+ #[ cfg( libc_union) ]
539+ pub fae: * mut posix_spawn_file_actions_entry_t,
540+ }
500541}
501542
502543s_no_extra_traits ! {
@@ -609,6 +650,12 @@ s_no_extra_traits! {
609650 __unused1: * mut :: c_void, //actually a function pointer
610651 pub sigev_notify_attributes: * mut :: c_void
611652 }
653+
654+ #[ cfg( libc_union) ]
655+ pub union __c_anonymous_posix_spawn_fae {
656+ pub open: __c_anonymous_posix_spawn_fae_open,
657+ pub dup2: __c_anonymous_posix_spawn_fae_dup2,
658+ }
612659}
613660
614661cfg_if ! {
@@ -1036,6 +1083,41 @@ cfg_if! {
10361083 self . sigev_notify_attributes. hash( state) ;
10371084 }
10381085 }
1086+
1087+ #[ cfg( libc_union) ]
1088+ impl Eq for __c_anonymous_posix_spawn_fae { }
1089+
1090+ #[ cfg( libc_union) ]
1091+ impl PartialEq for __c_anonymous_posix_spawn_fae {
1092+ fn eq( & self , other: & __c_anonymous_posix_spawn_fae) -> bool {
1093+ unsafe {
1094+ self . open == other. open
1095+ || self . dup2 == other. dup2
1096+ }
1097+ }
1098+ }
1099+
1100+ #[ cfg( libc_union) ]
1101+ impl :: fmt:: Debug for __c_anonymous_posix_spawn_fae {
1102+ fn fmt( & self , f: & mut :: fmt:: Formatter ) -> :: fmt:: Result {
1103+ unsafe {
1104+ f. debug_struct( "__c_anonymous_posix_fae" )
1105+ . field( "open" , & self . open)
1106+ . field( "dup2" , & self . dup2)
1107+ . finish( )
1108+ }
1109+ }
1110+ }
1111+
1112+ #[ cfg( libc_union) ]
1113+ impl :: hash:: Hash for __c_anonymous_posix_spawn_fae {
1114+ fn hash<H : :: hash:: Hasher >( & self , state: & mut H ) {
1115+ unsafe {
1116+ self . open. hash( state) ;
1117+ self . dup2. hash( state) ;
1118+ }
1119+ }
1120+ }
10391121 }
10401122}
10411123
@@ -2307,6 +2389,83 @@ extern "C" {
23072389 ts : * const :: timespec ,
23082390 sigmask : * const :: sigset_t ,
23092391 ) -> :: c_int ;
2392+
2393+ pub fn posix_spawn (
2394+ pid : * mut :: pid_t ,
2395+ path : * const :: c_char ,
2396+ file_actions : * const :: posix_spawn_file_actions_t ,
2397+ attrp : * const :: posix_spawnattr_t ,
2398+ argv : * const * mut :: c_char ,
2399+ envp : * const * mut :: c_char ,
2400+ ) -> :: c_int ;
2401+ pub fn posix_spawnp (
2402+ pid : * mut :: pid_t ,
2403+ file : * const :: c_char ,
2404+ file_actions : * const :: posix_spawn_file_actions_t ,
2405+ attrp : * const :: posix_spawnattr_t ,
2406+ argv : * const * mut :: c_char ,
2407+ envp : * const * mut :: c_char ,
2408+ ) -> :: c_int ;
2409+ pub fn posix_spawnattr_init ( attr : * mut posix_spawnattr_t ) -> :: c_int ;
2410+ pub fn posix_spawnattr_destroy ( attr : * mut posix_spawnattr_t ) -> :: c_int ;
2411+ pub fn posix_spawnattr_getsigdefault (
2412+ attr : * const posix_spawnattr_t ,
2413+ default : * mut :: sigset_t ,
2414+ ) -> :: c_int ;
2415+ pub fn posix_spawnattr_setsigdefault (
2416+ attr : * mut posix_spawnattr_t ,
2417+ default : * const :: sigset_t ,
2418+ ) -> :: c_int ;
2419+ pub fn posix_spawnattr_getsigmask (
2420+ attr : * const posix_spawnattr_t ,
2421+ default : * mut :: sigset_t ,
2422+ ) -> :: c_int ;
2423+ pub fn posix_spawnattr_setsigmask (
2424+ attr : * mut posix_spawnattr_t ,
2425+ default : * const :: sigset_t ,
2426+ ) -> :: c_int ;
2427+ pub fn posix_spawnattr_getflags (
2428+ attr : * const posix_spawnattr_t ,
2429+ flags : * mut :: c_short ,
2430+ ) -> :: c_int ;
2431+ pub fn posix_spawnattr_setflags ( attr : * mut posix_spawnattr_t , flags : :: c_short ) -> :: c_int ;
2432+ pub fn posix_spawnattr_getpgroup (
2433+ attr : * const posix_spawnattr_t ,
2434+ flags : * mut :: pid_t ,
2435+ ) -> :: c_int ;
2436+ pub fn posix_spawnattr_setpgroup ( attr : * mut posix_spawnattr_t , flags : :: pid_t ) -> :: c_int ;
2437+ pub fn posix_spawnattr_getschedpolicy (
2438+ attr : * const posix_spawnattr_t ,
2439+ flags : * mut :: c_int ,
2440+ ) -> :: c_int ;
2441+ pub fn posix_spawnattr_setschedpolicy ( attr : * mut posix_spawnattr_t , flags : :: c_int ) -> :: c_int ;
2442+ pub fn posix_spawnattr_getschedparam (
2443+ attr : * const posix_spawnattr_t ,
2444+ param : * mut :: sched_param ,
2445+ ) -> :: c_int ;
2446+ pub fn posix_spawnattr_setschedparam (
2447+ attr : * mut posix_spawnattr_t ,
2448+ param : * const :: sched_param ,
2449+ ) -> :: c_int ;
2450+
2451+ pub fn posix_spawn_file_actions_init ( actions : * mut posix_spawn_file_actions_t ) -> :: c_int ;
2452+ pub fn posix_spawn_file_actions_destroy ( actions : * mut posix_spawn_file_actions_t ) -> :: c_int ;
2453+ pub fn posix_spawn_file_actions_addopen (
2454+ actions : * mut posix_spawn_file_actions_t ,
2455+ fd : :: c_int ,
2456+ path : * const :: c_char ,
2457+ oflag : :: c_int ,
2458+ mode : :: mode_t ,
2459+ ) -> :: c_int ;
2460+ pub fn posix_spawn_file_actions_addclose (
2461+ actions : * mut posix_spawn_file_actions_t ,
2462+ fd : :: c_int ,
2463+ ) -> :: c_int ;
2464+ pub fn posix_spawn_file_actions_adddup2 (
2465+ actions : * mut posix_spawn_file_actions_t ,
2466+ fd : :: c_int ,
2467+ newfd : :: c_int ,
2468+ ) -> :: c_int ;
23102469}
23112470
23122471#[ link( name = "util" ) ]
0 commit comments