Skip to content

Commit 090201c

Browse files
authored
Merge pull request #4259 from sunshowers/illumos-posix-spawn
[solarish/illumos] add the posix_spawn family of functions
2 parents 41f1fdb + 162e306 commit 090201c

File tree

6 files changed

+163
-0
lines changed

6 files changed

+163
-0
lines changed

libc-test/build.rs

+1
Original file line numberDiff line numberDiff line change
@@ -864,6 +864,7 @@ fn test_solarish(target: &str) {
864864
"sched.h",
865865
"semaphore.h",
866866
"signal.h",
867+
"spawn.h",
867868
"stddef.h",
868869
"stdint.h",
869870
"stdio.h",

libc-test/semver/illumos.txt

+2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ POSIX_FADV_NORMAL
1414
POSIX_FADV_RANDOM
1515
POSIX_FADV_SEQUENTIAL
1616
POSIX_FADV_WILLNEED
17+
POSIX_SPAWN_SETSID
1718
posix_fadvise
1819
posix_fallocate
20+
posix_spawn_file_actions_addfchdir_np
1921
pthread_attr_get_np
2022
pthread_attr_getstackaddr
2123
pthread_attr_setstack

libc-test/semver/solarish.txt

+37
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,16 @@ LIO_READ
1515
LIO_WAIT
1616
LIO_WRITE
1717
PIPE_BUF
18+
POSIX_SPAWN_NOEXECERR_NP
19+
POSIX_SPAWN_NOSIGCHLD_NP
20+
POSIX_SPAWN_RESETIDS
21+
POSIX_SPAWN_SETPGROUP
22+
POSIX_SPAWN_SETSCHEDPARAM
23+
POSIX_SPAWN_SETSCHEDULER
24+
POSIX_SPAWN_SETSIGDEF
25+
POSIX_SPAWN_SETSIGIGN_NP
26+
POSIX_SPAWN_SETSIGMASK
27+
POSIX_SPAWN_WAITPID_NP
1828
SIGEV_PORT
1929
SIGRTMAX
2030
SIGRTMIN
@@ -37,5 +47,32 @@ bind
3747
in6_pktinfo
3848
in_pktinfo
3949
lio_listio
50+
posix_spawn
51+
posix_spawn_file_actions_addchdir
52+
posix_spawn_file_actions_addchdir_np
53+
posix_spawn_file_actions_addclose
54+
posix_spawn_file_actions_addclosefrom_np
55+
posix_spawn_file_actions_adddup2
56+
posix_spawn_file_actions_addfchdir
57+
posix_spawn_file_actions_addopen
58+
posix_spawn_file_actions_destroy
59+
posix_spawn_file_actions_init
60+
posix_spawnattr_destroy
61+
posix_spawnattr_getflags
62+
posix_spawnattr_getpgroup
63+
posix_spawnattr_getschedparam
64+
posix_spawnattr_getschedpolicy
65+
posix_spawnattr_getsigdefault
66+
posix_spawnattr_getsigignore_np
67+
posix_spawnattr_getsigmask
68+
posix_spawnattr_init
69+
posix_spawnattr_setflags
70+
posix_spawnattr_setpgroup
71+
posix_spawnattr_setschedparam
72+
posix_spawnattr_setschedpolicy
73+
posix_spawnattr_setsigdefault
74+
posix_spawnattr_setsigignore_np
75+
posix_spawnattr_setsigmask
76+
posix_spawnp
4077
recvmsg
4178
sendmsg

src/unix/solarish/illumos.rs

+7
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,8 @@ pub const POSIX_FADV_WILLNEED: c_int = 3;
205205
pub const POSIX_FADV_DONTNEED: c_int = 4;
206206
pub const POSIX_FADV_NOREUSE: c_int = 5;
207207

208+
pub const POSIX_SPAWN_SETSID: c_short = 0x40;
209+
208210
pub const SIGINFO: c_int = 41;
209211

210212
pub const O_DIRECT: c_int = 0x2000000;
@@ -335,6 +337,11 @@ extern "C" {
335337
pub fn pwritev(fd: c_int, iov: *const crate::iovec, iovcnt: c_int, offset: off_t) -> ssize_t;
336338
pub fn getpagesizes2(pagesize: *mut size_t, nelem: c_int) -> c_int;
337339

340+
pub fn posix_spawn_file_actions_addfchdir_np(
341+
file_actions: *mut crate::posix_spawn_file_actions_t,
342+
fd: c_int,
343+
) -> c_int;
344+
338345
pub fn ptsname_r(fildes: c_int, name: *mut c_char, namelen: size_t) -> c_int;
339346

340347
pub fn syncfs(fd: c_int) -> c_int;

src/unix/solarish/mod.rs

+114
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ pub type lgrp_lat_between_t = c_uint;
5454
pub type lgrp_mem_size_flag_t = c_uint;
5555
pub type lgrp_view_t = c_uint;
5656

57+
pub type posix_spawnattr_t = *mut c_void;
58+
pub type posix_spawn_file_actions_t = *mut c_void;
59+
5760
#[cfg_attr(feature = "extra_traits", derive(Debug))]
5861
pub enum timezone {}
5962
impl Copy for timezone {}
@@ -1541,6 +1544,17 @@ pub const POSIX_MADV_SEQUENTIAL: c_int = 2;
15411544
pub const POSIX_MADV_WILLNEED: c_int = 3;
15421545
pub const POSIX_MADV_DONTNEED: c_int = 4;
15431546

1547+
pub const POSIX_SPAWN_RESETIDS: c_short = 0x1;
1548+
pub const POSIX_SPAWN_SETPGROUP: c_short = 0x2;
1549+
pub const POSIX_SPAWN_SETSIGDEF: c_short = 0x4;
1550+
pub const POSIX_SPAWN_SETSIGMASK: c_short = 0x8;
1551+
pub const POSIX_SPAWN_SETSCHEDPARAM: c_short = 0x10;
1552+
pub const POSIX_SPAWN_SETSCHEDULER: c_short = 0x20;
1553+
pub const POSIX_SPAWN_SETSIGIGN_NP: c_short = 0x800;
1554+
pub const POSIX_SPAWN_NOSIGCHLD_NP: c_short = 0x1000;
1555+
pub const POSIX_SPAWN_WAITPID_NP: c_short = 0x2000;
1556+
pub const POSIX_SPAWN_NOEXECERR_NP: c_short = 0x4000;
1557+
15441558
pub const PTHREAD_CREATE_JOINABLE: c_int = 0;
15451559
pub const PTHREAD_CREATE_DETACHED: c_int = 0x40;
15461560
pub const PTHREAD_PROCESS_SHARED: c_int = 1;
@@ -2686,6 +2700,106 @@ extern "C" {
26862700
pub fn posix_fallocate(fd: c_int, offset: off_t, len: off_t) -> c_int;
26872701
pub fn posix_madvise(addr: *mut c_void, len: size_t, advice: c_int) -> c_int;
26882702

2703+
pub fn posix_spawn(
2704+
pid: *mut crate::pid_t,
2705+
path: *const c_char,
2706+
file_actions: *const posix_spawn_file_actions_t,
2707+
attrp: *const posix_spawnattr_t,
2708+
argv: *const *mut c_char,
2709+
envp: *const *mut c_char,
2710+
) -> c_int;
2711+
pub fn posix_spawnp(
2712+
pid: *mut crate::pid_t,
2713+
file: *const c_char,
2714+
file_actions: *const posix_spawn_file_actions_t,
2715+
attrp: *const posix_spawnattr_t,
2716+
argv: *const *mut c_char,
2717+
envp: *const *mut c_char,
2718+
) -> c_int;
2719+
2720+
pub fn posix_spawn_file_actions_init(file_actions: *mut posix_spawn_file_actions_t) -> c_int;
2721+
pub fn posix_spawn_file_actions_destroy(file_actions: *mut posix_spawn_file_actions_t)
2722+
-> c_int;
2723+
pub fn posix_spawn_file_actions_addopen(
2724+
file_actions: *mut posix_spawn_file_actions_t,
2725+
fildes: c_int,
2726+
path: *const c_char,
2727+
oflag: c_int,
2728+
mode: crate::mode_t,
2729+
) -> c_int;
2730+
pub fn posix_spawn_file_actions_addclose(
2731+
file_actions: *mut posix_spawn_file_actions_t,
2732+
fildes: c_int,
2733+
) -> c_int;
2734+
pub fn posix_spawn_file_actions_adddup2(
2735+
file_actions: *mut posix_spawn_file_actions_t,
2736+
fildes: c_int,
2737+
newfildes: c_int,
2738+
) -> c_int;
2739+
pub fn posix_spawn_file_actions_addclosefrom_np(
2740+
file_actions: *mut posix_spawn_file_actions_t,
2741+
lowfiledes: c_int,
2742+
) -> c_int;
2743+
pub fn posix_spawn_file_actions_addchdir(
2744+
file_actions: *mut posix_spawn_file_actions_t,
2745+
path: *const c_char,
2746+
) -> c_int;
2747+
pub fn posix_spawn_file_actions_addchdir_np(
2748+
file_actions: *mut posix_spawn_file_actions_t,
2749+
path: *const c_char,
2750+
) -> c_int;
2751+
pub fn posix_spawn_file_actions_addfchdir(
2752+
file_actions: *mut posix_spawn_file_actions_t,
2753+
fd: c_int,
2754+
) -> c_int;
2755+
2756+
pub fn posix_spawnattr_init(attr: *mut posix_spawnattr_t) -> c_int;
2757+
pub fn posix_spawnattr_destroy(attr: *mut posix_spawnattr_t) -> c_int;
2758+
pub fn posix_spawnattr_setflags(attr: *mut posix_spawnattr_t, flags: c_short) -> c_int;
2759+
pub fn posix_spawnattr_getflags(attr: *const posix_spawnattr_t, flags: *mut c_short) -> c_int;
2760+
pub fn posix_spawnattr_setpgroup(attr: *mut posix_spawnattr_t, pgroup: crate::pid_t) -> c_int;
2761+
pub fn posix_spawnattr_getpgroup(
2762+
attr: *const posix_spawnattr_t,
2763+
_pgroup: *mut crate::pid_t,
2764+
) -> c_int;
2765+
pub fn posix_spawnattr_setschedparam(
2766+
attr: *mut posix_spawnattr_t,
2767+
param: *const crate::sched_param,
2768+
) -> c_int;
2769+
pub fn posix_spawnattr_getschedparam(
2770+
attr: *const posix_spawnattr_t,
2771+
param: *mut crate::sched_param,
2772+
) -> c_int;
2773+
pub fn posix_spawnattr_setschedpolicy(attr: *mut posix_spawnattr_t, policy: c_int) -> c_int;
2774+
pub fn posix_spawnattr_getschedpolicy(
2775+
attr: *const posix_spawnattr_t,
2776+
_policy: *mut c_int,
2777+
) -> c_int;
2778+
pub fn posix_spawnattr_setsigdefault(
2779+
attr: *mut posix_spawnattr_t,
2780+
sigdefault: *const sigset_t,
2781+
) -> c_int;
2782+
pub fn posix_spawnattr_getsigdefault(
2783+
attr: *const posix_spawnattr_t,
2784+
sigdefault: *mut sigset_t,
2785+
) -> c_int;
2786+
pub fn posix_spawnattr_setsigignore_np(
2787+
attr: *mut posix_spawnattr_t,
2788+
sigignore: *const sigset_t,
2789+
) -> c_int;
2790+
pub fn posix_spawnattr_getsigignore_np(
2791+
attr: *const posix_spawnattr_t,
2792+
sigignore: *mut sigset_t,
2793+
) -> c_int;
2794+
pub fn posix_spawnattr_setsigmask(
2795+
attr: *mut posix_spawnattr_t,
2796+
sigmask: *const sigset_t,
2797+
) -> c_int;
2798+
pub fn posix_spawnattr_getsigmask(
2799+
attr: *const posix_spawnattr_t,
2800+
sigmask: *mut sigset_t,
2801+
) -> c_int;
2802+
26892803
pub fn shmat(shmid: c_int, shmaddr: *const c_void, shmflg: c_int) -> *mut c_void;
26902804

26912805
pub fn shmctl(shmid: c_int, cmd: c_int, buf: *mut crate::shmid_ds) -> c_int;

src/unix/solarish/solaris.rs

+2
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ pub const PRIV_TPD_UNSAFE: c_uint = 0x0800;
189189
pub const PRIV_PROC_TPD_RESET: c_uint = 0x1000;
190190
pub const PRIV_TPD_KILLABLE: c_uint = 0x2000;
191191

192+
pub const POSIX_SPAWN_SETSID: c_short = 0x400;
193+
192194
pub const PRIV_USER: c_uint = PRIV_DEBUG
193195
| PRIV_PROC_SENSITIVE
194196
| NET_MAC_AWARE

0 commit comments

Comments
 (0)