summaryrefslogtreecommitdiffstats
path: root/vendor/filetime/src
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/filetime/src')
-rw-r--r--vendor/filetime/src/lib.rs17
-rw-r--r--vendor/filetime/src/unix/mod.rs7
-rw-r--r--vendor/filetime/src/unix/utimensat.rs8
3 files changed, 25 insertions, 7 deletions
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<FileTime>) -> 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