Stop returning NOTCAPABLE errors from WASI calls. (#4666)
* Stop returning `NOTCAPABLE` errors from WASI calls. `ENOTCAPABLE` was an error code that is used as part of the rights system, from CloudABI. There is a set of flags associated with each file descriptor listing which operations can be performed with the file descriptor, and if an attempt is made to perform an operation with a file descriptor that isn't permitted by its rights flags, it fails with `ENOTCAPABLE`. WASI is removing the rights system. For example, WebAssembly/wasi-libc#294 removed support for translating `ENOTCAPABLE` into POSIX error codes, on the assumption that engines should stop using it. So as another step to migrating away from the rights system, remove uses of the `ENOTCAPABLE` error. * Update crates/wasi-common/src/file.rs Co-authored-by: Jamey Sharp <jamey@minilop.net> * Update crates/wasi-common/src/dir.rs Co-authored-by: Jamey Sharp <jamey@minilop.net> Co-authored-by: Jamey Sharp <jamey@minilop.net>
This commit is contained in:
@@ -238,7 +238,16 @@ impl FileEntry {
|
||||
if self.caps.contains(caps) {
|
||||
Ok(())
|
||||
} else {
|
||||
Err(Error::not_capable().context(format!("desired {:?}, has {:?}", caps, self.caps,)))
|
||||
let missing = caps & !self.caps;
|
||||
let err = if missing.intersects(FileCaps::READ | FileCaps::WRITE) {
|
||||
// `EBADF` is a little surprising here because it's also used
|
||||
// for unknown-file-descriptor errors, but it's what POSIX uses
|
||||
// in this situation.
|
||||
Error::badf()
|
||||
} else {
|
||||
Error::perm()
|
||||
};
|
||||
Err(err.context(format!("desired rights {:?}, has {:?}", caps, self.caps)))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user