diff --git a/include/bits/fcntl.h b/include/bits/fcntl.h index 2e194030f6..9c4a13b73f 100644 --- a/include/bits/fcntl.h +++ b/include/bits/fcntl.h @@ -3,11 +3,20 @@ int open(const char* filename, int flags, ...) { mode_t mode = 0; - va_list ap; - va_start(ap, flags); + va_list ap; + va_start(ap, flags); mode = va_arg(ap, mode_t); - va_end(ap); + va_end(ap); return sys_open(filename, flags, mode); } +int fcntl(int fildes, int cmd, ...) { + int args = 0; + va_list ap; + va_start(ap, cmd); + args = va_arg(ap, int); + va_end(ap); + return sys_fcntl(fildes, cmd, args); +} + #endif diff --git a/src/fcntl/src/lib.rs b/src/fcntl/src/lib.rs index b2f0d54432..0c0fa43ce2 100644 --- a/src/fcntl/src/lib.rs +++ b/src/fcntl/src/lib.rs @@ -37,7 +37,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 { +pub extern "C" fn sys_fcntl(fildes: c_int, cmd: c_int, arg: c_int) -> c_int { platform::fcntl(fildes, cmd, arg) } diff --git a/tests/Makefile b/tests/Makefile index 1d03ad22b4..15e80e24a0 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -10,6 +10,7 @@ BINS=\ dup \ error \ fchdir \ + fcntl \ fsync \ ftruncate \ getid \ diff --git a/tests/fcntl b/tests/fcntl new file mode 100755 index 0000000000..4499cb1482 Binary files /dev/null and b/tests/fcntl differ diff --git a/tests/fcntl.c b/tests/fcntl.c new file mode 100644 index 0000000000..f9293a5333 --- /dev/null +++ b/tests/fcntl.c @@ -0,0 +1,13 @@ +#include +#include +#include + +int main() { + //Lose our fd and pull it again + creat("fcntl.out", 0777); + int newfd = open("fcntl.out", 0); + int newfd2 = fcntl(newfd, F_DUPFD, 0); + printf("fd %d duped into fd %d\n", newfd, newfd2); + close(newfd); + close(newfd2); +} diff --git a/tests/fcntl.out b/tests/fcntl.out new file mode 100755 index 0000000000..e69de29bb2