Implement unix-specific permissions copying

Closes #4
This commit is contained in:
Josh Holmer 2018-01-30 10:12:42 -05:00
parent b971b362c2
commit eb739c9ff9
2 changed files with 20 additions and 3 deletions

View file

@ -1,5 +1,6 @@
### Version 0.19.1 (unreleased)
- Refactor of internal code.
- Implement unix-specific permissions copying for `-p` option
### Version 0.19.0
- [SEMVER_MAJOR] Default to overwriting the input file if `out_file` is not set.

View file

@ -713,12 +713,10 @@ fn perform_backup(input_path: &Path) -> Result<(), PngError> {
})
}
#[cfg(not(unix))]
fn copy_permissions(input_path: &Path, out_file: &File, verbosity: Option<u8>) {
if let Ok(f) = File::open(input_path) {
if let Ok(metadata) = f.metadata() {
// TODO: Implement full permission changing on Unix
// Not available in stable, requires block cfg statements
// See https://github.com/rust-lang/rust/issues/15701
if let Ok(out_meta) = out_file.metadata() {
let readonly = metadata.permissions().readonly();
out_meta.permissions().set_readonly(readonly);
@ -731,6 +729,24 @@ fn copy_permissions(input_path: &Path, out_file: &File, verbosity: Option<u8>) {
}
}
#[cfg(unix)]
fn copy_permissions(input_path: &Path, out_file: &File, verbosity: Option<u8>) {
use std::os::unix::fs::PermissionsExt;
if let Ok(f) = File::open(input_path) {
if let Ok(metadata) = f.metadata() {
if let Ok(out_meta) = out_file.metadata() {
let permissions = metadata.permissions().mode();
out_meta.permissions().set_mode(permissions);
return;
}
}
};
if verbosity.is_some() {
eprintln!("Failed to set permissions on output file");
}
}
fn image_to_pixel_array(image: &DynamicImage) -> Vec<Vec<u8>> {
image
.pixels()