From 5363f350887b1e5b5dd21a86f88c8af9d7fea6da Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:18:25 +0200 Subject: Merging upstream version 1.67.1+dfsg1. Signed-off-by: Daniel Baumann --- vendor/filetime/src/lib.rs | 17 ++++++++++++----- vendor/filetime/src/unix/mod.rs | 7 ++++++- vendor/filetime/src/unix/utimensat.rs | 8 +++++++- 3 files changed, 25 insertions(+), 7 deletions(-) (limited to 'vendor/filetime/src') diff --git a/vendor/filetime/src/lib.rs b/vendor/filetime/src/lib.rs index 594d8a8ae..95ea5d4f7 100644 --- a/vendor/filetime/src/lib.rs +++ b/vendor/filetime/src/lib.rs @@ -47,7 +47,7 @@ cfg_if::cfg_if! { } else if #[cfg(windows)] { #[path = "windows.rs"] mod imp; - } else if #[cfg(target_family = "wasm")] { + } else if #[cfg(all(target_family = "wasm", not(target_os = "emscripten")))] { #[path = "wasm.rs"] mod imp; } else { @@ -561,11 +561,18 @@ mod tests { set_file_times(&path, atime, mtime).unwrap(); let new_mtime = FileTime::from_unix_time(-10_000, 0); - set_file_times(&path, atime, new_mtime).unwrap(); + if cfg!(target_os = "aix") { + // On AIX, os checks if the unix timestamp is valid. + let result = set_file_times(&path, atime, new_mtime); + assert!(result.is_err()); + assert!(result.err().unwrap().kind() == std::io::ErrorKind::InvalidInput); + } else { + set_file_times(&path, atime, new_mtime).unwrap(); - let metadata = fs::metadata(&path).unwrap(); - let mtime = FileTime::from_last_modification_time(&metadata); - assert_eq!(mtime, new_mtime); + let metadata = fs::metadata(&path).unwrap(); + let mtime = FileTime::from_last_modification_time(&metadata); + assert_eq!(mtime, new_mtime); + } } #[test] diff --git a/vendor/filetime/src/unix/mod.rs b/vendor/filetime/src/unix/mod.rs index 66f9fc219..8b7788837 100644 --- a/vendor/filetime/src/unix/mod.rs +++ b/vendor/filetime/src/unix/mod.rs @@ -15,7 +15,8 @@ cfg_if::cfg_if! { mod utimes; mod macos; pub use self::macos::*; - } else if #[cfg(any(target_os = "solaris", + } else if #[cfg(any(target_os = "aix", + target_os = "solaris", target_os = "illumos", target_os = "emscripten", target_os = "freebsd", @@ -46,6 +47,10 @@ fn to_timespec(ft: &Option) -> timespec { } else if #[cfg(target_os = "haiku")] { // https://git.haiku-os.org/haiku/tree/headers/posix/sys/stat.h?#n106 const UTIME_OMIT: i64 = 1000000001; + } else if #[cfg(target_os = "aix")] { + // AIX hasn't disclosed system header files yet. + // https://github.com/golang/go/blob/master/src/cmd/vendor/golang.org/x/sys/unix/zerrors_aix_ppc64.go#L1007 + const UTIME_OMIT: i64 = -3; } else { // http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/sys/stat.h?annotate=1.68.30.1 // https://github.com/emscripten-core/emscripten/blob/master/system/include/libc/sys/stat.h#L71 diff --git a/vendor/filetime/src/unix/utimensat.rs b/vendor/filetime/src/unix/utimensat.rs index 42a1ada2c..c9153a67f 100644 --- a/vendor/filetime/src/unix/utimensat.rs +++ b/vendor/filetime/src/unix/utimensat.rs @@ -32,7 +32,7 @@ pub fn set_file_handle_times( } pub fn set_symlink_file_times(p: &Path, atime: FileTime, mtime: FileTime) -> io::Result<()> { - set_times(p, Some(atime), Some(mtime), false) + set_times(p, Some(atime), Some(mtime), true) } fn set_times( @@ -42,6 +42,12 @@ fn set_times( symlink: bool, ) -> io::Result<()> { let flags = if symlink { + if cfg!(target_os = "emscripten") { + return Err(io::Error::new( + io::ErrorKind::Other, + "emscripten does not support utimensat for symlinks", + )); + } libc::AT_SYMLINK_NOFOLLOW } else { 0 -- cgit v1.2.3