Skip to content

Commit

Permalink
Fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
Freaky committed Mar 16, 2020
1 parent 8357b0f commit ad75b5e
Showing 1 changed file with 34 additions and 11 deletions.
45 changes: 34 additions & 11 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
//! use faccess::AccessMode;
//!
//! let path = Path::new("/bin/sh");
//! assert_eq!(path.access(AccessMode::READ | AccessMode::EXECUTE), Ok(()));
//! assert_eq!(path.access(AccessMode::READ | AccessMode::EXECUTE).is_ok(), true);
//! assert_eq!(path.readable(), true);
//! assert_eq!(path.writable(), false);
//! assert_eq!(path.executable(), true);
Expand Down Expand Up @@ -243,15 +243,23 @@ mod imp {
if !md.is_dir() {
// Read Only is ignored for directories
if mode & FILE_GENERIC_WRITE == FILE_GENERIC_WRITE && md.permissions().readonly() {
return Err(io::Error::new(io::ErrorKind::PermissionDenied, "File is read only"));
return Err(io::Error::new(
io::ErrorKind::PermissionDenied,
"File is read only",
));
}

// If it doesn't have the correct extension it isn't executable
if mode & FILE_GENERIC_EXECUTE == FILE_GENERIC_EXECUTE {
if let Some(ext) = p.extension().and_then(|s| s.to_str()) {
match ext {
"exe" | "com" | "bat" | "cmd" => (),
_ => return Err(io::Error::new(io::ErrorKind::InvalidData, "File not executable")),
_ => {
return Err(io::Error::new(
io::ErrorKind::InvalidData,
"File not executable",
))
}
}
}
}
Expand All @@ -262,7 +270,10 @@ mod imp {
.map(|_| ());
} else if mode & FILE_GENERIC_EXECUTE == FILE_GENERIC_EXECUTE {
// You can't execute directories
return Err(io::Error::new(io::ErrorKind::InvalidData, "Directory not executable"));
return Err(io::Error::new(
io::ErrorKind::InvalidData,
"Directory not executable",
));
}

let sd = SecurityDescriptor::for_path(p)?;
Expand Down Expand Up @@ -309,7 +320,10 @@ mod imp {
) != 0
} {
if result == 0 {
Err(io::Error::new(io::ErrorKind::PermissionDenied, "Permission Denied"))
Err(io::Error::new(
io::ErrorKind::PermissionDenied,
"Permission Denied",
))
} else {
Ok(())
}
Expand Down Expand Up @@ -352,9 +366,12 @@ mod imp {
pub fn access(p: &Path, mode: AccessMode) -> io::Result<()> {
if mode.contains(AccessMode::WRITE) {
if std::fs::metadata(p)?.permissions().readonly() {
return Err(io::Error::new(io::ErrorKind::PermissionDenied, "Path is read only"));
return Err(io::Error::new(
io::ErrorKind::PermissionDenied,
"Path is read only",
));
} else {
return Ok(())
return Ok(());
}
}

Expand Down Expand Up @@ -466,7 +483,7 @@ pub trait PathExt {
}
}

impl PathExt for std::path::Path {
impl PathExt for Path {
fn access(&self, mode: AccessMode) -> io::Result<()> {
imp::access(&self, mode)
}
Expand All @@ -478,15 +495,19 @@ fn amazing_test_suite() {

assert!(cargotoml.access(AccessMode::EXISTS).is_ok());
assert!(cargotoml.access(AccessMode::READ).is_ok());
assert!(cargotoml.access(AccessMode::READ | AccessMode::WRITE).is_ok());
assert!(cargotoml
.access(AccessMode::READ | AccessMode::WRITE)
.is_ok());

assert!(cargotoml.readable());
assert!(cargotoml.writable());

#[cfg(unix)]
{
assert!(!cargotoml.executable());
assert!(cargotoml.access(AccessMode::READ | AccessMode::EXECUTE).is_err());
assert!(cargotoml
.access(AccessMode::READ | AccessMode::EXECUTE)
.is_err());

let sh = Path::new("/bin/sh");
assert!(sh.readable());
Expand All @@ -500,7 +521,9 @@ fn amazing_test_suite() {
#[cfg(windows)]
{
assert!(!cargotoml.executable());
assert!(cargotoml.access(AccessMode::READ | AccessMode::EXECUTE).is_err());
assert!(cargotoml
.access(AccessMode::READ | AccessMode::EXECUTE)
.is_err());

let notepad = Path::new("C:\\Windows\\notepad.exe");
assert!(notepad.readable());
Expand Down

0 comments on commit ad75b5e

Please sign in to comment.