瀏覽代碼

Add pwrite

Jeremy Soller 6 年之前
父節點
當前提交
d818a8d10e
共有 1 個文件被更改,包括 18 次插入2 次删除
  1. 18 2
      src/header/unistd/mod.rs

+ 18 - 2
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]