From b35abd1065146ce8f161cfe3601b72f3322082a9 Mon Sep 17 00:00:00 2001 From: Paul Sajna <paulsajna@gmail.com> Date: Sun, 11 Mar 2018 21:20:59 -0700 Subject: [PATCH] test and fixes --- src/lib.rs | 1 + src/platform/src/linux/mod.rs | 2 +- src/platform/src/redox/mod.rs | 7 ++++++- src/resource/cbindgen.toml | 4 ++-- src/wait/src/lib.rs | 2 +- tests/.gitignore | 1 + tests/Makefile | 1 + tests/waitpid.c | 16 ++++++++++++++++ 8 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 tests/waitpid.c diff --git a/src/lib.rs b/src/lib.rs index 8becd7bd0..a45c9d711 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -17,6 +17,7 @@ extern crate string; extern crate sys_time; extern crate time; extern crate unistd; +extern crate wait; extern crate wctype; #[lang = "eh_personality"] diff --git a/src/platform/src/linux/mod.rs b/src/platform/src/linux/mod.rs index 3f0ef34ed..f26076e6c 100644 --- a/src/platform/src/linux/mod.rs +++ b/src/platform/src/linux/mod.rs @@ -160,7 +160,7 @@ pub fn unlink(path: *const c_char) -> 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) }) as pid_t + e(unsafe { syscall!(WAIT4, pid, stat_loc, options, 0) }) as pid_t } pub fn write(fildes: c_int, buf: &[u8]) -> ssize_t { diff --git a/src/platform/src/redox/mod.rs b/src/platform/src/redox/mod.rs index 4d98965be..a0b2c1d13 100644 --- a/src/platform/src/redox/mod.rs +++ b/src/platform/src/redox/mod.rs @@ -203,7 +203,12 @@ pub fn unlink(path: *const c_char) -> c_int { } pub fn waitpid(pid: pid_t, stat_loc: *mut c_int, options: c_int) -> pid_t { - e(syscall::waitpid(pid as usize, stat_loc as &mut usize, options as usize)) + unsafe { + let mut temp: usize = *stat_loc as usize; + let res = e(syscall::waitpid(pid as usize, &mut temp, options as usize)); + *stat_loc = temp as c_int; + res + } } pub fn write(fd: c_int, buf: &[u8]) -> ssize_t { diff --git a/src/resource/cbindgen.toml b/src/resource/cbindgen.toml index 788d10553..1b33a4e43 100644 --- a/src/resource/cbindgen.toml +++ b/src/resource/cbindgen.toml @@ -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 diff --git a/src/wait/src/lib.rs b/src/wait/src/lib.rs index c64108a58..2563e41d0 100644 --- a/src/wait/src/lib.rs +++ b/src/wait/src/lib.rs @@ -11,7 +11,7 @@ use resource::rusage; #[no_mangle] pub unsafe extern "C" fn wait(stat_loc: *mut c_int) -> pid_t { - waitpid(-1, stat_loc, 0) + waitpid(0-1, stat_loc, 0) } #[no_mangle] diff --git a/tests/.gitignore b/tests/.gitignore index 6cfb8396b..0edf72a5d 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -33,5 +33,6 @@ /string/strrchr /string/strspn /unlink +/waitpid /write diff --git a/tests/Makefile b/tests/Makefile index a25288960..e0bbb3fff 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -28,6 +28,7 @@ EXPECT_BINS=\ string/strrchr \ string/strspn \ unlink \ + waitpid \ write # Binaries that may generate varied output diff --git a/tests/waitpid.c b/tests/waitpid.c new file mode 100644 index 000000000..dc8fe52a6 --- /dev/null +++ b/tests/waitpid.c @@ -0,0 +1,16 @@ +#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); + } +} -- GitLab