From b5192437c39ff4d6b75653e11b7c59cd6795439d Mon Sep 17 00:00:00 2001 From: Paul Sajna Date: Sun, 4 Mar 2018 09:24:33 -0800 Subject: [PATCH] ftruncate --- platform/src/linux/mod.rs | 6 ++++++ platform/src/redox/mod.rs | 4 ++++ src/unistd/src/lib.rs | 2 +- 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/platform/src/linux/mod.rs b/platform/src/linux/mod.rs index bc429b0b7a..9f2cfb0e02 100644 --- a/platform/src/linux/mod.rs +++ b/platform/src/linux/mod.rs @@ -63,6 +63,12 @@ pub fn fsync(fildes: c_int) -> c_int { } } +pub fn ftruncate(fildes: c_int, length: off_t) -> c_int { + unsafe { + syscall!(FTRUNCATE, fildes, length) as c_int + } +} + #[cfg(target_arch = "x86_64")] pub fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> c_int { unsafe { diff --git a/platform/src/redox/mod.rs b/platform/src/redox/mod.rs index a2a207e0cd..dd5e89b0ee 100644 --- a/platform/src/redox/mod.rs +++ b/platform/src/redox/mod.rs @@ -51,6 +51,10 @@ pub fn fsync(fd: c_int) -> c_int { syscall::fsync(fd as usize)? as c_int } +pub fn ftruncate(fd: c_int, len: off_t) -> { + syscall::ftruncate(fd as usize, len as usize)? as c_int +} + pub fn open(path: *const c_char, oflag: c_int, mode: mode_t) -> c_int { let path = unsafe { c_str(path) }; syscall::open(path, (oflag as usize) | (mode as usize)).unwrap() as c_int diff --git a/src/unistd/src/lib.rs b/src/unistd/src/lib.rs index d965c7d40f..b8858100f6 100644 --- a/src/unistd/src/lib.rs +++ b/src/unistd/src/lib.rs @@ -161,7 +161,7 @@ pub extern "C" fn fsync(fildes: c_int) -> c_int { #[no_mangle] pub extern "C" fn ftruncate(fildes: c_int, length: off_t) -> c_int { - unimplemented!(); + platform::ftruncate(fildes, length) } #[no_mangle]