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