From 3456b4f30e323ed1f73f2350e46d8b192c708085 Mon Sep 17 00:00:00 2001
From: David Carlier <devnexen@gmail.com>
Date: Wed, 19 Apr 2023 21:48:54 +0100
Subject: [PATCH] unistd: fdatasync implementation.

---
 src/header/unistd/mod.rs  | 2 +-
 src/platform/linux/mod.rs | 4 ++++
 src/platform/pal/mod.rs   | 2 ++
 src/platform/redox/mod.rs | 5 +++++
 4 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs
index 2738b7112..696a187de 100644
--- a/src/header/unistd/mod.rs
+++ b/src/header/unistd/mod.rs
@@ -223,7 +223,7 @@ pub extern "C" fn fchdir(fildes: c_int) -> c_int {
 
 // #[no_mangle]
 pub extern "C" fn fdatasync(fildes: c_int) -> c_int {
-    unimplemented!();
+    Sys::fdatasync(fildes)
 }
 
 #[no_mangle]
diff --git a/src/platform/linux/mod.rs b/src/platform/linux/mod.rs
index bd67fa53d..79e758070 100644
--- a/src/platform/linux/mod.rs
+++ b/src/platform/linux/mod.rs
@@ -145,6 +145,10 @@ impl Pal for Sys {
         e(unsafe { syscall!(FCHOWN, fildes, owner, group) }) as c_int
     }
 
+    fn fdatasync(fildes: c_int) -> c_int {
+        e(unsafe { syscall!(FDATASYNC, fildes) }) as c_int
+    }
+
     fn flock(fd: c_int, operation: c_int) -> c_int {
         e(unsafe { syscall!(FLOCK, fd, operation) }) as c_int
     }
diff --git a/src/platform/pal/mod.rs b/src/platform/pal/mod.rs
index 8d27b1db3..64c80a8ce 100644
--- a/src/platform/pal/mod.rs
+++ b/src/platform/pal/mod.rs
@@ -53,6 +53,8 @@ pub trait Pal {
 
     fn fchown(fildes: c_int, owner: uid_t, group: gid_t) -> c_int;
 
+    fn fdatasync(fildes: c_int) -> c_int;
+
     fn flock(fd: c_int, operation: c_int) -> c_int;
 
     fn fstat(fildes: c_int, buf: *mut stat) -> c_int;
diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs
index a6d5e1885..247b92d89 100644
--- a/src/platform/redox/mod.rs
+++ b/src/platform/redox/mod.rs
@@ -251,6 +251,11 @@ impl Pal for Sys {
         e(syscall::fcntl(fd as usize, cmd as usize, args as usize)) as c_int
     }
 
+    fn fdatasync(fd: c_int) -> c_int {
+        // TODO: "Needs" syscall update
+        e(syscall::fsync(fd as usize)) as c_int
+    }
+
     fn flock(_fd: c_int, _operation: c_int) -> c_int {
         // TODO: Redox does not have file locking yet
         0
-- 
GitLab