diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index 4859819457..d443509b6e 100644 --- a/src/header/unistd/mod.rs +++ b/src/header/unistd/mod.rs @@ -601,9 +601,9 @@ pub extern "C" fn setreuid(ruid: uid_t, euid: uid_t) -> c_int { Sys::setreuid(ruid, euid) } -// #[no_mangle] +#[no_mangle] pub extern "C" fn setsid() -> pid_t { - unimplemented!(); + Sys::setsid() } #[no_mangle] diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs index 8f973c25b7..722f238366 100644 --- a/src/platform/linux/mod.rs +++ b/src/platform/linux/mod.rs @@ -476,6 +476,10 @@ impl Pal for Sys { e(unsafe { syscall!(SETREUID, ruid, euid) }) as c_int } + fn setsid() -> c_int { + e(unsafe { syscall!(SETSID) }) as c_int + } + fn symlink(path1: &CStr, path2: &CStr) -> c_int { e(unsafe { syscall!(SYMLINKAT, path1.as_ptr(), AT_FDCWD, path2.as_ptr()) }) as c_int } diff --git a/src/platform/pal/mod.rs b/src/platform/pal/mod.rs index 91f04b4cc9..c6bdc770a3 100644 --- a/src/platform/pal/mod.rs +++ b/src/platform/pal/mod.rs @@ -175,6 +175,8 @@ pub trait Pal { fn setreuid(ruid: uid_t, euid: uid_t) -> c_int; + fn setsid() -> c_int; + fn symlink(path1: &CStr, path2: &CStr) -> c_int; fn sync() -> c_int; diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index c2575956ec..decf4fd350 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -807,6 +807,12 @@ impl Pal for Sys { -1 } + fn setsid() -> c_int { + // TODO + unsafe { errno = ENOSYS }; + -1 + } + fn setregid(rgid: gid_t, egid: gid_t) -> c_int { e(syscall::setregid(rgid as usize, egid as usize)) as c_int }