Skip to content

Commit 6058062

Browse files
committed
netbsd add posix_spawn api.
1 parent 91fa905 commit 6058062

File tree

2 files changed

+182
-0
lines changed

2 files changed

+182
-0
lines changed

libc-test/semver/netbsd.txt

+23
Original file line numberDiff line numberDiff line change
@@ -1274,6 +1274,29 @@ pipe2
12741274
pollts
12751275
popen
12761276
posix_madvise
1277+
posix_spawn
1278+
posix_spawn_file_actions_entry_t
1279+
posix_spawn_file_actions_addclose
1280+
posix_spawn_file_actions_adddup2
1281+
posix_spawn_file_actions_addopen
1282+
posix_spawn_file_actions_destroy
1283+
posix_spawn_file_actions_init
1284+
posix_spawn_file_actions_t
1285+
posix_spawnattr_destroy
1286+
posix_spawnattr_getflags
1287+
posix_spawnattr_getpgroup
1288+
posix_spawnattr_getschedparam
1289+
posix_spawnattr_getschedpolicy
1290+
posix_spawnattr_getsigdefault
1291+
posix_spawnattr_getsigmask
1292+
posix_spawnattr_init
1293+
posix_spawnattr_setflags
1294+
posix_spawnattr_setpgroup
1295+
posix_spawnattr_setschedparam
1296+
posix_spawnattr_setschedpolicy
1297+
posix_spawnattr_setsigdefault
1298+
posix_spawnattr_setsigmask
1299+
posix_spawnattr_t
12771300
preadv
12781301
pseudo_AF_HDRCMPLT
12791302
pseudo_AF_KEY

src/unix/bsd/netbsdlike/netbsd/mod.rs

+159
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,14 @@ pub type Elf64_Xword = u64;
3535

3636
pub 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+
3846
cfg_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

502543
s_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

614661
cfg_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

Comments
 (0)