Skip to content

Commit e004210

Browse files
committed
Add posix_spawn(3) support on OpenBSD
1 parent 9899913 commit e004210

File tree

5 files changed

+110
-83
lines changed

5 files changed

+110
-83
lines changed

libc-test/build.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,7 @@ fn test_openbsd(target: &str) {
478478
"pthread.h",
479479
"dlfcn.h",
480480
"search.h",
481+
"spawn.h",
481482
"signal.h",
482483
"string.h",
483484
"sys/file.h",

libc-test/semver/openbsd.txt

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1156,6 +1156,27 @@ pipe2
11561156
pledge
11571157
popen
11581158
posix_madvise
1159+
posix_spawn
1160+
posix_spawn_file_actions_addclose
1161+
posix_spawn_file_actions_adddup2
1162+
posix_spawn_file_actions_addopen
1163+
posix_spawn_file_actions_destroy
1164+
posix_spawn_file_actions_init
1165+
posix_spawnattr_destroy
1166+
posix_spawnattr_getflags
1167+
posix_spawnattr_getpgroup
1168+
posix_spawnattr_getschedparam
1169+
posix_spawnattr_getschedpolicy
1170+
posix_spawnattr_getsigdefault
1171+
posix_spawnattr_getsigmask
1172+
posix_spawnattr_init
1173+
posix_spawnattr_setflags
1174+
posix_spawnattr_setpgroup
1175+
posix_spawnattr_setschedparam
1176+
posix_spawnattr_setschedpolicy
1177+
posix_spawnattr_setsigdefault
1178+
posix_spawnattr_setsigmask
1179+
posix_spawnp
11591180
preadv
11601181
pseudo_AF_HDRCMPLT
11611182
pseudo_AF_PFLOW

src/unix/bsd/netbsdlike/mod.rs

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -364,6 +364,13 @@ pub const POSIX_MADV_SEQUENTIAL: ::c_int = 2;
364364
pub const POSIX_MADV_WILLNEED: ::c_int = 3;
365365
pub const POSIX_MADV_DONTNEED: ::c_int = 4;
366366

367+
pub const POSIX_SPAWN_RESETIDS: ::c_int = 0x01;
368+
pub const POSIX_SPAWN_SETPGROUP: ::c_int = 0x02;
369+
pub const POSIX_SPAWN_SETSCHEDPARAM: ::c_int = 0x04;
370+
pub const POSIX_SPAWN_SETSCHEDULER: ::c_int = 0x08;
371+
pub const POSIX_SPAWN_SETSIGDEF: ::c_int = 0x10;
372+
pub const POSIX_SPAWN_SETSIGMASK: ::c_int = 0x20;
373+
367374
pub const PTHREAD_CREATE_JOINABLE: ::c_int = 0;
368375
pub const PTHREAD_CREATE_DETACHED: ::c_int = 1;
369376

@@ -753,6 +760,83 @@ extern "C" {
753760
infop: *mut ::siginfo_t,
754761
options: ::c_int,
755762
) -> ::c_int;
763+
764+
pub fn posix_spawn(
765+
pid: *mut ::pid_t,
766+
path: *const ::c_char,
767+
file_actions: *const ::posix_spawn_file_actions_t,
768+
attrp: *const ::posix_spawnattr_t,
769+
argv: *const *mut ::c_char,
770+
envp: *const *mut ::c_char,
771+
) -> ::c_int;
772+
pub fn posix_spawnp(
773+
pid: *mut ::pid_t,
774+
file: *const ::c_char,
775+
file_actions: *const ::posix_spawn_file_actions_t,
776+
attrp: *const ::posix_spawnattr_t,
777+
argv: *const *mut ::c_char,
778+
envp: *const *mut ::c_char,
779+
) -> ::c_int;
780+
pub fn posix_spawnattr_init(attr: *mut posix_spawnattr_t) -> ::c_int;
781+
pub fn posix_spawnattr_destroy(attr: *mut posix_spawnattr_t) -> ::c_int;
782+
pub fn posix_spawnattr_getsigdefault(
783+
attr: *const posix_spawnattr_t,
784+
default: *mut ::sigset_t,
785+
) -> ::c_int;
786+
pub fn posix_spawnattr_setsigdefault(
787+
attr: *mut posix_spawnattr_t,
788+
default: *const ::sigset_t,
789+
) -> ::c_int;
790+
pub fn posix_spawnattr_getsigmask(
791+
attr: *const posix_spawnattr_t,
792+
default: *mut ::sigset_t,
793+
) -> ::c_int;
794+
pub fn posix_spawnattr_setsigmask(
795+
attr: *mut posix_spawnattr_t,
796+
default: *const ::sigset_t,
797+
) -> ::c_int;
798+
pub fn posix_spawnattr_getflags(
799+
attr: *const posix_spawnattr_t,
800+
flags: *mut ::c_short,
801+
) -> ::c_int;
802+
pub fn posix_spawnattr_setflags(attr: *mut posix_spawnattr_t, flags: ::c_short) -> ::c_int;
803+
pub fn posix_spawnattr_getpgroup(
804+
attr: *const posix_spawnattr_t,
805+
flags: *mut ::pid_t,
806+
) -> ::c_int;
807+
pub fn posix_spawnattr_setpgroup(attr: *mut posix_spawnattr_t, flags: ::pid_t) -> ::c_int;
808+
pub fn posix_spawnattr_getschedpolicy(
809+
attr: *const posix_spawnattr_t,
810+
flags: *mut ::c_int,
811+
) -> ::c_int;
812+
pub fn posix_spawnattr_setschedpolicy(attr: *mut posix_spawnattr_t, flags: ::c_int) -> ::c_int;
813+
pub fn posix_spawnattr_getschedparam(
814+
attr: *const posix_spawnattr_t,
815+
param: *mut ::sched_param,
816+
) -> ::c_int;
817+
pub fn posix_spawnattr_setschedparam(
818+
attr: *mut posix_spawnattr_t,
819+
param: *const ::sched_param,
820+
) -> ::c_int;
821+
822+
pub fn posix_spawn_file_actions_init(actions: *mut posix_spawn_file_actions_t) -> ::c_int;
823+
pub fn posix_spawn_file_actions_destroy(actions: *mut posix_spawn_file_actions_t) -> ::c_int;
824+
pub fn posix_spawn_file_actions_addopen(
825+
actions: *mut posix_spawn_file_actions_t,
826+
fd: ::c_int,
827+
path: *const ::c_char,
828+
oflag: ::c_int,
829+
mode: ::mode_t,
830+
) -> ::c_int;
831+
pub fn posix_spawn_file_actions_addclose(
832+
actions: *mut posix_spawn_file_actions_t,
833+
fd: ::c_int,
834+
) -> ::c_int;
835+
pub fn posix_spawn_file_actions_adddup2(
836+
actions: *mut posix_spawn_file_actions_t,
837+
fd: ::c_int,
838+
newfd: ::c_int,
839+
) -> ::c_int;
756840
}
757841

758842
extern "C" {

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

Lines changed: 0 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -2343,13 +2343,6 @@ pub const PT_LWPNEXT: ::c_int = 25;
23432343
pub const PT_SET_SIGPASS: ::c_int = 26;
23442344
pub const PT_GET_SIGPASS: ::c_int = 27;
23452345
pub const PT_FIRSTMACH: ::c_int = 32;
2346-
2347-
pub const POSIX_SPAWN_RESETIDS: ::c_int = 0x01;
2348-
pub const POSIX_SPAWN_SETPGROUP: ::c_int = 0x02;
2349-
pub const POSIX_SPAWN_SETSCHEDPARAM: ::c_int = 0x04;
2350-
pub const POSIX_SPAWN_SETSCHEDULER: ::c_int = 0x08;
2351-
pub const POSIX_SPAWN_SETSIGDEF: ::c_int = 0x10;
2352-
pub const POSIX_SPAWN_SETSIGMASK: ::c_int = 0x20;
23532346
pub const POSIX_SPAWN_RETURNERROR: ::c_int = 0x40;
23542347

23552348
// Flags for chflags(2)
@@ -2888,82 +2881,6 @@ extern "C" {
28882881
ts: *const ::timespec,
28892882
sigmask: *const ::sigset_t,
28902883
) -> ::c_int;
2891-
pub fn posix_spawn(
2892-
pid: *mut ::pid_t,
2893-
path: *const ::c_char,
2894-
file_actions: *const ::posix_spawn_file_actions_t,
2895-
attrp: *const ::posix_spawnattr_t,
2896-
argv: *const *mut ::c_char,
2897-
envp: *const *mut ::c_char,
2898-
) -> ::c_int;
2899-
pub fn posix_spawnp(
2900-
pid: *mut ::pid_t,
2901-
file: *const ::c_char,
2902-
file_actions: *const ::posix_spawn_file_actions_t,
2903-
attrp: *const ::posix_spawnattr_t,
2904-
argv: *const *mut ::c_char,
2905-
envp: *const *mut ::c_char,
2906-
) -> ::c_int;
2907-
pub fn posix_spawnattr_init(attr: *mut posix_spawnattr_t) -> ::c_int;
2908-
pub fn posix_spawnattr_destroy(attr: *mut posix_spawnattr_t) -> ::c_int;
2909-
pub fn posix_spawnattr_getsigdefault(
2910-
attr: *const posix_spawnattr_t,
2911-
default: *mut ::sigset_t,
2912-
) -> ::c_int;
2913-
pub fn posix_spawnattr_setsigdefault(
2914-
attr: *mut posix_spawnattr_t,
2915-
default: *const ::sigset_t,
2916-
) -> ::c_int;
2917-
pub fn posix_spawnattr_getsigmask(
2918-
attr: *const posix_spawnattr_t,
2919-
default: *mut ::sigset_t,
2920-
) -> ::c_int;
2921-
pub fn posix_spawnattr_setsigmask(
2922-
attr: *mut posix_spawnattr_t,
2923-
default: *const ::sigset_t,
2924-
) -> ::c_int;
2925-
pub fn posix_spawnattr_getflags(
2926-
attr: *const posix_spawnattr_t,
2927-
flags: *mut ::c_short,
2928-
) -> ::c_int;
2929-
pub fn posix_spawnattr_setflags(attr: *mut posix_spawnattr_t, flags: ::c_short) -> ::c_int;
2930-
pub fn posix_spawnattr_getpgroup(
2931-
attr: *const posix_spawnattr_t,
2932-
flags: *mut ::pid_t,
2933-
) -> ::c_int;
2934-
pub fn posix_spawnattr_setpgroup(attr: *mut posix_spawnattr_t, flags: ::pid_t) -> ::c_int;
2935-
pub fn posix_spawnattr_getschedpolicy(
2936-
attr: *const posix_spawnattr_t,
2937-
flags: *mut ::c_int,
2938-
) -> ::c_int;
2939-
pub fn posix_spawnattr_setschedpolicy(attr: *mut posix_spawnattr_t, flags: ::c_int) -> ::c_int;
2940-
pub fn posix_spawnattr_getschedparam(
2941-
attr: *const posix_spawnattr_t,
2942-
param: *mut ::sched_param,
2943-
) -> ::c_int;
2944-
pub fn posix_spawnattr_setschedparam(
2945-
attr: *mut posix_spawnattr_t,
2946-
param: *const ::sched_param,
2947-
) -> ::c_int;
2948-
2949-
pub fn posix_spawn_file_actions_init(actions: *mut posix_spawn_file_actions_t) -> ::c_int;
2950-
pub fn posix_spawn_file_actions_destroy(actions: *mut posix_spawn_file_actions_t) -> ::c_int;
2951-
pub fn posix_spawn_file_actions_addopen(
2952-
actions: *mut posix_spawn_file_actions_t,
2953-
fd: ::c_int,
2954-
path: *const ::c_char,
2955-
oflag: ::c_int,
2956-
mode: ::mode_t,
2957-
) -> ::c_int;
2958-
pub fn posix_spawn_file_actions_addclose(
2959-
actions: *mut posix_spawn_file_actions_t,
2960-
fd: ::c_int,
2961-
) -> ::c_int;
2962-
pub fn posix_spawn_file_actions_adddup2(
2963-
actions: *mut posix_spawn_file_actions_t,
2964-
fd: ::c_int,
2965-
newfd: ::c_int,
2966-
) -> ::c_int;
29672884
pub fn getrandom(buf: *mut ::c_void, buflen: ::size_t, flags: ::c_uint) -> ::ssize_t;
29682885

29692886
pub fn reboot(mode: ::c_int, bootstr: *mut ::c_char) -> ::c_int;

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,10 @@ pub type Elf64_Xword = u64;
4141
pub type ENTRY = entry;
4242
pub type ACTION = ::c_uint;
4343

44+
// spawn.h
45+
pub type posix_spawnattr_t = *mut ::c_void;
46+
pub type posix_spawn_file_actions_t = *mut ::c_void;
47+
4448
cfg_if! {
4549
if #[cfg(target_pointer_width = "64")] {
4650
type Elf_Addr = Elf64_Addr;

0 commit comments

Comments
 (0)