Skip to content
Snippets Groups Projects
Unverified Commit 93f7ec7a authored by Ian Douglas Scott's avatar Ian Douglas Scott
Browse files

Make it not an error to open a directory without O_DIRECTORY or O_STAT

POSIX says this should work, and some software seems to rely on that.
parent 801cbd90
No related branches found
No related tags found
No related merge requests found
......@@ -189,12 +189,7 @@ impl Scheme for FileScheme {
Some(node) => if flags & (O_CREAT | O_EXCL) == O_CREAT | O_EXCL {
return Err(Error::new(EEXIST));
} else if node.1.is_dir() {
if flags & O_STAT != O_STAT && flags & O_DIRECTORY != O_DIRECTORY {
// println!("{:X} & {:X}: EISDIR {}", flags, O_DIRECTORY, path);
return Err(Error::new(EISDIR));
}
if flags & O_ACCMODE == O_RDONLY {
if flags & O_ACCMODE == O_RDONLY && flags & O_DIRECTORY == O_DIRECTORY {
if ! node.1.permission(uid, gid, Node::MODE_READ) {
// println!("dir not readable {:o}", node.1.mode);
return Err(Error::new(EACCES));
......@@ -214,11 +209,11 @@ impl Scheme for FileScheme {
}
Box::new(DirResource::new(path.to_string(), node.0, data))
} else if flags & O_STAT == O_STAT {
Box::new(DirResource::new(path.to_string(), node.0, Vec::new()))
} else if flags & O_RDONLY == O_RDONLY || flags & O_WRONLY == O_WRONLY {
// println!("{:X} & {:X}: EISDIR {}", flags, O_DIRECTORY, path);
return Err(Error::new(EISDIR));
} else {
// println!("dir not opened with O_RDONLY");
return Err(Error::new(EACCES));
Box::new(DirResource::new(path.to_string(), node.0, Vec::new()))
}
} else if node.1.is_symlink() && !(flags & O_STAT == O_STAT && flags & O_NOFOLLOW == O_NOFOLLOW) && flags & O_SYMLINK != O_SYMLINK {
let mut resolve_nodes = Vec::new();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment