mirror of
https://github.com/RGBCube/uutils-coreutils
synced 2025-07-29 20:17:45 +00:00
cp: Add support for preserving xattrs.
This commit is contained in:
parent
6d3e9eabe4
commit
4cb727f80b
2 changed files with 20 additions and 1 deletions
|
@ -22,6 +22,9 @@ filetime = "0.1"
|
|||
[target.'cfg(target_os = "linux")'.dependencies]
|
||||
ioctl-sys = "0.5.2"
|
||||
|
||||
[target.'cfg(unix)'.dependencies]
|
||||
xattr="0.2.1"
|
||||
|
||||
[[bin]]
|
||||
name = "cp"
|
||||
path = "main.rs"
|
||||
|
|
18
src/cp/cp.rs
18
src/cp/cp.rs
|
@ -19,6 +19,8 @@ use filetime::FileTime;
|
|||
#[macro_use] extern crate ioctl_sys;
|
||||
#[macro_use] extern crate uucore;
|
||||
#[macro_use] extern crate quick_error;
|
||||
#[cfg(unix)]
|
||||
extern crate xattr;
|
||||
|
||||
use std::mem;
|
||||
use std::ffi::CString;
|
||||
|
@ -796,7 +798,21 @@ fn copy_attribute(source: &Path, dest: &Path, attribute: &Attribute) -> CopyResu
|
|||
},
|
||||
Attribute::Context => return Err(Error::NotImplemented("preserving context not implemented".to_string())),
|
||||
Attribute::Links => return Err(Error::NotImplemented("preserving links not implemented".to_string())),
|
||||
Attribute::Xattr => return Err(Error::NotImplemented("preserving xattr not implemented".to_string())),
|
||||
Attribute::Xattr => {
|
||||
#[cfg(unix)]
|
||||
{
|
||||
let xattrs = xattr::list(source)?;
|
||||
for attr in xattrs {
|
||||
if let Some(attr_value) = xattr::get(source, attr.clone())? {
|
||||
xattr::set(dest, attr, &attr_value[..]);
|
||||
}
|
||||
}
|
||||
}
|
||||
#[cfg(not(unix))]
|
||||
{
|
||||
return Err(format!("XAttrs are only supported on unix.").into());
|
||||
}
|
||||
},
|
||||
Attribute::All => return Err(Error::NotImplemented("preserving a not implemented".to_string())),
|
||||
})
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue