From d818a8d10ea8d39e3a064c7b8b27d2f22b349239 Mon Sep 17 00:00:00 2001 From: Jeremy Soller <jeremy@system76.com> Date: Sun, 25 Nov 2018 14:38:12 -0700 Subject: [PATCH] Add pwrite --- src/header/unistd/mod.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index 4573d4d8..c10b0cd2 100644 --- a/src/header/unistd/mod.rs +++ b/src/header/unistd/mod.rs @@ -417,14 +417,30 @@ pub extern "C" fn pthread_atfork( unimplemented!(); } -// #[no_mangle] +#[no_mangle] pub extern "C" fn pwrite( fildes: c_int, buf: *const c_void, nbyte: size_t, offset: off_t, ) -> ssize_t { - unimplemented!(); + //TODO: better pwrite using system calls + + let previous = lseek(fildes, offset, SEEK_SET); + if previous == -1 { + return -1; + } + + let res = write(fildes, buf, nbyte); + if res < 0 { + return res; + } + + if lseek(fildes, previous, SEEK_SET) == -1 { + return -1; + } + + res } #[no_mangle] -- GitLab