From 14c8125108934a51004ba1b23a8d622227d4ffb0 Mon Sep 17 00:00:00 2001 From: MggMuggins Date: Thu, 8 Mar 2018 19:55:35 -0600 Subject: [PATCH 1/2] Implement fcntl No tests written yet! See #36 --- src/fcntl/src/lib.rs | 2 +- src/platform/src/linux/mod.rs | 4 ++++ src/platform/src/redox/mod.rs | 4 ++++ 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/fcntl/src/lib.rs b/src/fcntl/src/lib.rs index 72af0c0685..1dca5572c8 100644 --- a/src/fcntl/src/lib.rs +++ b/src/fcntl/src/lib.rs @@ -38,7 +38,7 @@ pub extern "C" fn creat(path: *const c_char, mode: mode_t) -> c_int { #[no_mangle] pub extern "C" fn fcntl(fildes: c_int, cmd: c_int, arg: c_int) -> c_int { - unimplemented!(); + platform::fcntl(fildes, cmd, arg) } #[no_mangle] diff --git a/src/platform/src/linux/mod.rs b/src/platform/src/linux/mod.rs index ed0c116d45..5f0066c2a4 100644 --- a/src/platform/src/linux/mod.rs +++ b/src/platform/src/linux/mod.rs @@ -62,6 +62,10 @@ pub fn fchdir(fildes: c_int) -> c_int { e(unsafe { syscall!(FCHDIR, fildes) }) as c_int } +pub fn fcntl(fildes: c_int, cmd: c_int, arg: c_int) -> c_int { + e(unsafe { syscall!(FCNTL, fildes, cmd, arg) }) as c_int +} + pub fn fork() -> pid_t { e(unsafe { syscall!(FORK) }) as pid_t } diff --git a/src/platform/src/redox/mod.rs b/src/platform/src/redox/mod.rs index 940098b6bd..50db6d14de 100644 --- a/src/platform/src/redox/mod.rs +++ b/src/platform/src/redox/mod.rs @@ -63,6 +63,10 @@ pub fn fchdir(fd: c_int) -> c_int { } } +pub fn fcntl(fd: c_int, cmd: c_int, args: c_int) -> c_int { + e(syscall::fcntl(fd, cmd, args)) as c_int +} + pub fn fork() -> pid_t { e(unsafe { syscall::clone(0) }) as pid_t } From 0cb3a893a10b35c49537ece42137a55a571a7e18 Mon Sep 17 00:00:00 2001 From: MggMuggins Date: Thu, 8 Mar 2018 20:19:55 -0600 Subject: [PATCH 2/2] Fix compile on redox --- src/platform/src/redox/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/platform/src/redox/mod.rs b/src/platform/src/redox/mod.rs index 50db6d14de..edf9ad1724 100644 --- a/src/platform/src/redox/mod.rs +++ b/src/platform/src/redox/mod.rs @@ -64,7 +64,7 @@ pub fn fchdir(fd: c_int) -> c_int { } pub fn fcntl(fd: c_int, cmd: c_int, args: c_int) -> c_int { - e(syscall::fcntl(fd, cmd, args)) as c_int + e(syscall::fcntl(fd as usize, cmd as usize, args as usize)) as c_int } pub fn fork() -> pid_t {