#[cfg(not(any(target_os = "redox", target_os = "wasi")))] #[test] fn test_utimensat() { use rustix::fs::{cwd, openat, statat, utimensat, AtFlags, Mode, OFlags, Timespec, Timestamps}; let tmp = tempfile::tempdir().unwrap(); let dir = openat( cwd(), tmp.path(), OFlags::RDONLY | OFlags::CLOEXEC, Mode::empty(), ) .unwrap(); let _ = openat( &dir, "foo", OFlags::CREATE | OFlags::WRONLY | OFlags::CLOEXEC, Mode::empty(), ) .unwrap(); let times = Timestamps { last_access: Timespec { tv_sec: 44000, tv_nsec: 45000, }, last_modification: Timespec { tv_sec: 46000, tv_nsec: 47000, }, }; utimensat(&dir, "foo", ×, AtFlags::empty()).unwrap(); let after = statat(&dir, "foo", AtFlags::empty()).unwrap(); assert_eq!(times.last_modification.tv_sec as u64, after.st_mtime as u64); #[cfg(not(target_os = "netbsd"))] assert_eq!( times.last_modification.tv_nsec as u64, after.st_mtime_nsec as u64 ); #[cfg(target_os = "netbsd")] assert_eq!( times.last_modification.tv_nsec as u64, after.st_mtimensec as u64 ); assert!(times.last_access.tv_sec as u64 >= after.st_atime as u64); #[cfg(not(target_os = "netbsd"))] assert!( times.last_access.tv_sec as u64 > after.st_atime as u64 || times.last_access.tv_nsec as u64 >= after.st_atime_nsec as u64 ); #[cfg(target_os = "netbsd")] assert!( times.last_access.tv_sec as u64 > after.st_atime as u64 || times.last_access.tv_nsec as u64 >= after.st_atimensec as u64 ); } #[cfg(not(any(target_os = "redox", target_os = "wasi")))] #[test] fn test_utimensat_noent() { use rustix::fs::{cwd, openat, utimensat, AtFlags, Mode, OFlags, Timespec, Timestamps}; let tmp = tempfile::tempdir().unwrap(); let dir = openat( cwd(), tmp.path(), OFlags::RDONLY | OFlags::CLOEXEC, Mode::empty(), ) .unwrap(); let times = Timestamps { last_access: Timespec { tv_sec: 44000, tv_nsec: 45000, }, last_modification: Timespec { tv_sec: 46000, tv_nsec: 47000, }, }; assert_eq!( utimensat(&dir, "foo", ×, AtFlags::empty()).unwrap_err(), rustix::io::Errno::NOENT ); } #[cfg(not(any(target_os = "redox", target_os = "wasi")))] #[test] fn test_utimensat_notdir() { use rustix::fs::{cwd, openat, utimensat, AtFlags, Mode, OFlags, Timespec, Timestamps}; let tmp = tempfile::tempdir().unwrap(); let dir = openat( cwd(), tmp.path(), OFlags::RDONLY | OFlags::CLOEXEC, Mode::empty(), ) .unwrap(); let foo = openat( &dir, "foo", OFlags::CREATE | OFlags::WRONLY | OFlags::CLOEXEC, Mode::empty(), ) .unwrap(); let times = Timestamps { last_access: Timespec { tv_sec: 44000, tv_nsec: 45000, }, last_modification: Timespec { tv_sec: 46000, tv_nsec: 47000, }, }; assert_eq!( utimensat(&foo, "bar", ×, AtFlags::empty()).unwrap_err(), rustix::io::Errno::NOTDIR ); }