diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index 2738b71123..696a187de2 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 bd67fa53d6..79e7580702 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 8d27b1db3a..64c80a8ceb 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 a6d5e18853..247b92d89c 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