summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Colomiets <paul@colomiets.name>2015-08-22 22:17:43 +0300
committerPaul Colomiets <paul@colomiets.name>2015-08-22 22:17:43 +0300
commit1020c6417a47e5abcc2ddce8f0c0c014f52ad60d (patch)
tree8bda2ddf940680111ec508a73c85261885340d0a
parent573e6a5753be415de2bbcfaedd7cfe4cb56d1822 (diff)
downloadnix-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.rs8
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<()> {