diff options
author | Paul Colomiets <paul@colomiets.name> | 2015-08-22 22:17:43 +0300 |
---|---|---|
committer | Paul Colomiets <paul@colomiets.name> | 2015-08-22 22:17:43 +0300 |
commit | 1020c6417a47e5abcc2ddce8f0c0c014f52ad60d (patch) | |
tree | 8bda2ddf940680111ec508a73c85261885340d0a | |
parent | 573e6a5753be415de2bbcfaedd7cfe4cb56d1822 (diff) | |
download | nix-1020c6417a47e5abcc2ddce8f0c0c014f52ad60d.zip |
Fix signature of linux `clone` function
In fact function returns pid of new process (or tid of new thread)
-rw-r--r-- | src/sched.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/src/sched.rs b/src/sched.rs index 3c9d87e8..9783a469 100644 --- a/src/sched.rs +++ b/src/sched.rs @@ -1,5 +1,5 @@ use std::mem; -use libc::{c_int, c_uint, c_void, c_ulong}; +use libc::{c_int, c_uint, c_void, c_ulong, pid_t}; use errno::Errno; use {Result, Error}; @@ -157,7 +157,7 @@ pub fn sched_setaffinity(pid: isize, cpuset: &CpuSet) -> Result<()> { } } -pub fn clone(mut cb: CloneCb, stack: &mut [u8], flags: CloneFlags) -> Result<()> { +pub fn clone(mut cb: CloneCb, stack: &mut [u8], flags: CloneFlags) -> Result<pid_t> { extern "C" fn callback(data: *mut CloneCb) -> c_int { let cb: &mut CloneCb = unsafe { &mut *data }; (*cb)() as c_int @@ -168,11 +168,11 @@ pub fn clone(mut cb: CloneCb, stack: &mut [u8], flags: CloneFlags) -> Result<()> ffi::clone(mem::transmute(callback), ptr as *mut c_void, flags, &mut cb) }; - if res != 0 { + if res < 0 { return Err(Error::Sys(Errno::last())); } - Ok(()) + Ok(res) } pub fn unshare(flags: CloneFlags) -> Result<()> { |