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