Jeremy Soller 6 лет назад
Родитель
Сommit
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]