mirror of https://github.com/golang/go.git
syscall: remove wasip1 O_DIRECTORY workaround
Wasmtime used to error when opening a directory without passing the O_DIRECTORY flag, which required doing a stat to determine whether to inject the flag prior to opening any file. The workaround was subject to races since the stat and open calls were not atomic. Wasmtime fixed the issue in v8.0.1. For details see: - https://github.com/bytecodealliance/wasmtime/pull/4967 - https://github.com/bytecodealliance/wasmtime/pull/6163 - https://github.com/bytecodealliance/wasmtime/releases/tag/v8.0.1 Change-Id: I0f9fe6a696024b70fffe63b83e8f61e48acd0c4a Reviewed-on: https://go-review.googlesource.com/c/go/+/489955 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Ian Lance Taylor <iant@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Johan Brandhorst-Satzkorn <johan.brandhorst@gmail.com> Run-TryBot: Ian Lance Taylor <iant@google.com> Reviewed-by: Dmitri Shuralyov <dmitshur@google.com>
This commit is contained in:
parent
afe2d22219
commit
da3a184b18
|
|
@ -432,29 +432,6 @@ func Open(path string, openmode int, perm uint32) (int, error) {
|
|||
oflags |= OFLAG_EXCL
|
||||
}
|
||||
|
||||
// Remove when https://github.com/bytecodealliance/wasmtime/pull/4967 is merged.
|
||||
var fi Stat_t
|
||||
if errno := path_filestat_get(
|
||||
dirFd,
|
||||
LOOKUP_SYMLINK_FOLLOW,
|
||||
pathPtr,
|
||||
pathLen,
|
||||
unsafe.Pointer(&fi),
|
||||
); errno != 0 && errno != ENOENT {
|
||||
return -1, errnoErr(errno)
|
||||
}
|
||||
if fi.Filetype == FILETYPE_DIRECTORY {
|
||||
oflags |= OFLAG_DIRECTORY
|
||||
// WASM runtimes appear to return EINVAL when passing invalid
|
||||
// combination of flags to open directories; however, TestOpenError
|
||||
// in the os package expects EISDIR, so we precheck this condition
|
||||
// here to emulate the expected behavior.
|
||||
const invalidFlags = O_WRONLY | O_RDWR | O_CREATE | O_APPEND | O_TRUNC | O_EXCL
|
||||
if (openmode & invalidFlags) != 0 {
|
||||
return 0, EISDIR
|
||||
}
|
||||
}
|
||||
|
||||
var rights rights
|
||||
switch openmode & (O_RDONLY | O_WRONLY | O_RDWR) {
|
||||
case O_RDONLY:
|
||||
|
|
|
|||
Loading…
Reference in New Issue