1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-31 13:07:46 +00:00

cp: use filetime to set timestamps.

This commit is contained in:
Matt8898 2017-08-15 11:42:50 +02:00
parent 03432db951
commit 38dd8c5836
2 changed files with 5 additions and 13 deletions

View file

@ -17,6 +17,7 @@ walkdir = "1.0.7"
clap = "2.20.0"
quick-error = "1.1.0"
uucore = { path="../uucore" }
filetime = "0.1"
[target.'cfg(target_os = "linux")'.dependencies]
ioctl-sys = "0.5.2"

View file

@ -13,6 +13,8 @@
extern crate libc;
extern crate clap;
extern crate walkdir;
extern crate filetime;
use filetime::FileTime;
#[cfg(target_os = "linux")]
#[macro_use] extern crate ioctl_sys;
#[macro_use] extern crate uucore;
@ -790,19 +792,8 @@ fn copy_attribute(source: &Path, dest: &Path, attribute: &Attribute) -> CopyResu
fs::set_permissions(dest, metadata.permissions()).context(context)?;
},
Attribute::Timestamps => {
let meta = fs::metadata(source)?;
let modified = meta.modified()?;
let accessed = meta.accessed()?;
let src_path = CString::new(source.as_os_str().to_str().unwrap()).unwrap();
let dest_path = CString::new(dest.as_os_str().to_str().unwrap()).unwrap();
unsafe {
let mut stat: libc::stat = mem::zeroed();
libc::stat(src_path.as_ptr(), &mut stat);
libc::utime(dest_path.as_ptr(), &libc::utimbuf{
actime: stat.st_atime,
modtime: stat.st_mtime
});
}
let metadata = fs::metadata(source)?;
filetime::set_file_times(Path::new(dest), FileTime::from_last_access_time(&metadata), FileTime::from_last_modification_time(&metadata))?;
},
Attribute::Context => return Err(Error::NotImplemented("preserving context not implemented".to_string())),
Attribute::Links => return Err(Error::NotImplemented("preserving links not implemented".to_string())),