diff --git a/Cargo.lock b/Cargo.lock index b24e0eda2c..8743a44a63 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -90,9 +90,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.40" +version = "0.4.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" +checksum = "c469d952047f47f91b68d1cba3f10d63c11d73e4636f24f08daf0278abf01c4d" dependencies = [ "num-traits", ] @@ -233,9 +233,9 @@ checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa" [[package]] name = "libm" -version = "0.2.11" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +checksum = "c9627da5196e5d8ed0b0495e61e518847578da83483c37288316d9b2e03a7f72" [[package]] name = "libredox" @@ -457,8 +457,8 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.11" -source = "git+https://gitlab.redox-os.org/redox-os/syscall.git?branch=master#8f646a63ac9c3aa532a37ddfdc136ec19878f0d6" +version = "0.5.12" +source = "git+https://gitlab.redox-os.org/redox-os/syscall.git?branch=master#fe32c6b89dae51e609d5c53880dec1834ec9bde0" dependencies = [ "bitflags", ] @@ -593,9 +593,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.8" +version = "0.10.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +checksum = "a7507d819769d01a365ab707794a4084392c824f54a7a6a7862f8c3d0892b283" dependencies = [ "cfg-if", "cpufeatures", @@ -631,9 +631,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.100" +version = "2.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" +checksum = "8ce2b7fc941b3a24138a0a7cf8e858bfc6a992e7978a068a5c760deb0ed43caf" dependencies = [ "proc-macro2", "quote", diff --git a/Cargo.toml b/Cargo.toml index 8846727afb..93f40a6e23 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,7 +61,7 @@ features = ["c_api"] sc = "0.2.3" [target.'cfg(target_os = "redox")'.dependencies] -redox_syscall = "0.5.11" +redox_syscall = "0.5.12" redox-rt = { path = "redox-rt" } redox-path = "0.2" redox_event = { git = "https://gitlab.redox-os.org/redox-os/event.git", default-features = false, features = [ diff --git a/src/platform/redox/mod.rs b/src/platform/redox/mod.rs index 59fcd4014e..de4d2000bf 100644 --- a/src/platform/redox/mod.rs +++ b/src/platform/redox/mod.rs @@ -578,8 +578,11 @@ impl Pal for Sys { Self::fchown(*file, owner, group) } - fn link(path1: CStr, path2: CStr) -> Result<()> { - unsafe { syscall::link(path1.as_ptr() as *const u8, path2.as_ptr() as *const u8)? }; + fn link(oldpath: CStr, newpath: CStr) -> Result<()> { + let newpath = newpath.to_str().map_err(|_| Errno(EINVAL))?; + + let file = File::open(oldpath, fcntl::O_PATH | fcntl::O_CLOEXEC)?; + syscall::flink(*file as usize, newpath)?; Ok(()) }