diff --git a/src/main.rs b/src/main.rs index fb9d6eb..dc32560 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,6 +5,7 @@ mod config; mod dirs; mod error; mod files; +mod perms; mod skel; use std::path::PathBuf; diff --git a/src/perms.rs b/src/perms.rs new file mode 100644 index 0000000..3cd864f --- /dev/null +++ b/src/perms.rs @@ -0,0 +1,27 @@ +use std::fs::{set_permissions, metadata, Permissions}; +use std::path::PathBuf; + +use crate::error::*; + +pub fn get_perms(path: &PathBuf) -> MkrootResult { + match metadata(path) { + Ok(meta) => Ok(meta.permissions()), + Err(e) => Err(MkrootError::from(format!( + "Error retrieving metadata {}: {}", + path.display(), + e + ))), + } +} + +pub fn set_perms(path: &PathBuf, perms: Permissions) -> MkrootResult<()> { + if let Err(e) = set_permissions(path, perms) { + return Err(MkrootError::from(format!( + "Error setting permissions {}: {}", + path.display(), + e + ))); + } + + Ok(()) +}