@@ -35,6 +35,14 @@ pub type Elf64_Xword = u64;
35
35
36
36
pub type iconv_t = * mut :: c_void ;
37
37
38
+ e ! {
39
+ pub enum fae_action {
40
+ FAE_OPEN ,
41
+ FAE_DUP2 ,
42
+ FAE_CLOSE ,
43
+ }
44
+ }
45
+
38
46
cfg_if ! {
39
47
if #[ cfg( target_pointer_width = "64" ) ] {
40
48
type Elf_Addr = Elf64_Addr ;
@@ -497,6 +505,39 @@ s! {
497
505
pub kve_vn_mode: u32 ,
498
506
pub kve_path: [ [ :: c_char; 32 ] ; 32 ] ,
499
507
}
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
+ }
500
541
}
501
542
502
543
s_no_extra_traits ! {
@@ -609,6 +650,12 @@ s_no_extra_traits! {
609
650
__unused1: * mut :: c_void, //actually a function pointer
610
651
pub sigev_notify_attributes: * mut :: c_void
611
652
}
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
+ }
612
659
}
613
660
614
661
cfg_if ! {
@@ -1036,6 +1083,41 @@ cfg_if! {
1036
1083
self . sigev_notify_attributes. hash( state) ;
1037
1084
}
1038
1085
}
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
+ }
1039
1121
}
1040
1122
}
1041
1123
@@ -2307,6 +2389,83 @@ extern "C" {
2307
2389
ts : * const :: timespec ,
2308
2390
sigmask : * const :: sigset_t ,
2309
2391
) -> :: 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 ;
2310
2469
}
2311
2470
2312
2471
#[ link( name = "util" ) ]
0 commit comments