diff --git a/src/header/unistd/mod.rs b/src/header/unistd/mod.rs index 2738b7112373207e87b1cea61169b4ca6b708984..696a187de2374740f0e8b44d038feb255efbf228 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 bd67fa53d6fb6652e11c4232190dbcadd9df9404..79e75807029823f1b73fce4b1a3c3843496cf14f 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 8d27b1db3a9c4a13ea5adbc4e785d5fc8feb313b..64c80a8ceb22641b48543ab72d70461f40c75d15 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 a6d5e18853e0d10532b265d5cb92190f49b2a2ca..247b92d89c612ad40ceae33813400e2c5b7977dc 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