Merge branch 'master' into master
This commit is contained in:
@@ -20,6 +20,7 @@ extern crate string;
|
||||
extern crate sys_time;
|
||||
extern crate time;
|
||||
extern crate unistd;
|
||||
extern crate wait;
|
||||
extern crate wctype;
|
||||
|
||||
#[lang = "eh_personality"]
|
||||
|
||||
@@ -163,6 +163,10 @@ pub fn unlink(path: *const c_char) -> c_int {
|
||||
e(unsafe { syscall!(UNLINKAT, AT_FDCWD, path, 0) }) as c_int
|
||||
}
|
||||
|
||||
pub fn waitpid(pid: pid_t, stat_loc: *mut c_int, options: c_int) -> pid_t {
|
||||
e(unsafe { syscall!(WAIT4, pid, stat_loc, options, 0) }) as pid_t
|
||||
}
|
||||
|
||||
pub fn write(fildes: c_int, buf: &[u8]) -> ssize_t {
|
||||
e(unsafe { syscall!(WRITE, fildes, buf.as_ptr(), buf.len()) }) as ssize_t
|
||||
}
|
||||
|
||||
@@ -206,6 +206,17 @@ pub fn unlink(path: *const c_char) -> c_int {
|
||||
e(syscall::unlink(path)) as c_int
|
||||
}
|
||||
|
||||
pub fn waitpid(pid: pid_t, stat_loc: *mut c_int, options: c_int) -> pid_t {
|
||||
unsafe {
|
||||
let mut temp: usize = 0;
|
||||
let res = e(syscall::waitpid(pid as usize, &mut temp, options as usize));
|
||||
if !stat_loc.is_null() {
|
||||
*stat_loc = temp as c_int;
|
||||
}
|
||||
res
|
||||
}
|
||||
}
|
||||
|
||||
pub fn write(fd: c_int, buf: &[u8]) -> ssize_t {
|
||||
e(syscall::write(fd as usize, buf)) as ssize_t
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
sys_includes = ["sys/types.h", "sys/time.h"]
|
||||
sys_includes = ["sys/types.h", "stdint.h", "sys/time.h"]
|
||||
include_guard = "_SYS_RESOURCE_H"
|
||||
language = "C"
|
||||
style = "Tag"
|
||||
style = "Both"
|
||||
|
||||
[enum]
|
||||
prefix_with_name = true
|
||||
|
||||
+2
-2
@@ -11,7 +11,7 @@ use resource::rusage;
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn wait(stat_loc: *mut c_int) -> pid_t {
|
||||
unimplemented!();
|
||||
waitpid(!0, stat_loc, 0)
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
@@ -39,5 +39,5 @@ pub unsafe extern "C" fn wait3(
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe extern "C" fn waitpid(pid: pid_t, stat_loc: *mut c_int, options: c_int) -> pid_t {
|
||||
unimplemented!();
|
||||
platform::waitpid(pid, stat_loc, options)
|
||||
}
|
||||
|
||||
@@ -37,5 +37,6 @@
|
||||
/string/strrchr
|
||||
/string/strspn
|
||||
/unlink
|
||||
/waitpid
|
||||
/write
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ EXPECT_BINS=\
|
||||
string/strstr \
|
||||
string/strpbrk \
|
||||
unlink \
|
||||
waitpid \
|
||||
write
|
||||
|
||||
# Binaries that may generate varied output
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#include <sys/wait.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
pid_t pid = fork();
|
||||
if (pid == 0) {
|
||||
// child
|
||||
sleep(1);
|
||||
exit(0);
|
||||
} else {
|
||||
// parent
|
||||
int stat_loc;
|
||||
waitpid(pid, &stat_loc, 0);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user