mirror of https://github.com/golang/go.git
syscall: remove support for O_NONBLOCK and O_SYNC on js/wasm
This commit removes O_NONBLOCK on js/wasm. O_SYNC can't be removed, because it is referenced by the os package, so instead its use returns an error. On Windows, the options O_NONBLOCK and O_SYNC are not available when opening a file with Node.js. This caused the initialization of the syscall package to panic. The simplest solution is to not support these two options on js/wasm at all. Code written for js/wasm is supposed to be portable, so platform-specific options should not be used. Fixes #26524. Change-Id: I366aa3cdcfa59dfa9dc513368259f363ca090f00 Reviewed-on: https://go-review.googlesource.com/126600 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
137f2fba57
commit
9e2a4f4dff
|
|
@ -37,7 +37,7 @@
|
||||||
|
|
||||||
let outputBuf = "";
|
let outputBuf = "";
|
||||||
global.fs = {
|
global.fs = {
|
||||||
constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1, O_NONBLOCK: -1, O_SYNC: -1 }, // unused
|
constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused
|
||||||
writeSync(fd, buf) {
|
writeSync(fd, buf) {
|
||||||
outputBuf += decoder.decode(buf);
|
outputBuf += decoder.decode(buf);
|
||||||
const nl = outputBuf.lastIndexOf("\n");
|
const nl = outputBuf.lastIndexOf("\n");
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@
|
||||||
package syscall
|
package syscall
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
"io"
|
"io"
|
||||||
"sync"
|
"sync"
|
||||||
"syscall/js"
|
"syscall/js"
|
||||||
|
|
@ -20,14 +21,12 @@ var jsFS = js.Global().Get("fs")
|
||||||
var constants = jsFS.Get("constants")
|
var constants = jsFS.Get("constants")
|
||||||
|
|
||||||
var (
|
var (
|
||||||
nodeWRONLY = constants.Get("O_WRONLY").Int()
|
nodeWRONLY = constants.Get("O_WRONLY").Int()
|
||||||
nodeRDWR = constants.Get("O_RDWR").Int()
|
nodeRDWR = constants.Get("O_RDWR").Int()
|
||||||
nodeCREATE = constants.Get("O_CREAT").Int()
|
nodeCREATE = constants.Get("O_CREAT").Int()
|
||||||
nodeTRUNC = constants.Get("O_TRUNC").Int()
|
nodeTRUNC = constants.Get("O_TRUNC").Int()
|
||||||
nodeAPPEND = constants.Get("O_APPEND").Int()
|
nodeAPPEND = constants.Get("O_APPEND").Int()
|
||||||
nodeEXCL = constants.Get("O_EXCL").Int()
|
nodeEXCL = constants.Get("O_EXCL").Int()
|
||||||
nodeNONBLOCK = constants.Get("O_NONBLOCK").Int()
|
|
||||||
nodeSYNC = constants.Get("O_SYNC").Int()
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type jsFile struct {
|
type jsFile struct {
|
||||||
|
|
@ -78,11 +77,8 @@ func Open(path string, openmode int, perm uint32) (int, error) {
|
||||||
if openmode&O_EXCL != 0 {
|
if openmode&O_EXCL != 0 {
|
||||||
flags |= nodeEXCL
|
flags |= nodeEXCL
|
||||||
}
|
}
|
||||||
if openmode&O_NONBLOCK != 0 {
|
|
||||||
flags |= nodeNONBLOCK
|
|
||||||
}
|
|
||||||
if openmode&O_SYNC != 0 {
|
if openmode&O_SYNC != 0 {
|
||||||
flags |= nodeSYNC
|
return 0, errors.New("syscall.Open: O_SYNC is not supported by js/wasm")
|
||||||
}
|
}
|
||||||
|
|
||||||
jsFD, err := fsCall("openSync", path, flags, perm)
|
jsFD, err := fsCall("openSync", path, flags, perm)
|
||||||
|
|
|
||||||
|
|
@ -103,13 +103,12 @@ const (
|
||||||
O_WRONLY = 1
|
O_WRONLY = 1
|
||||||
O_RDWR = 2
|
O_RDWR = 2
|
||||||
|
|
||||||
O_CREAT = 0100
|
O_CREAT = 0100
|
||||||
O_CREATE = O_CREAT
|
O_CREATE = O_CREAT
|
||||||
O_TRUNC = 01000
|
O_TRUNC = 01000
|
||||||
O_APPEND = 02000
|
O_APPEND = 02000
|
||||||
O_EXCL = 0200
|
O_EXCL = 0200
|
||||||
O_NONBLOCK = 04000
|
O_SYNC = 010000
|
||||||
O_SYNC = 010000
|
|
||||||
|
|
||||||
O_CLOEXEC = 0
|
O_CLOEXEC = 0
|
||||||
)
|
)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue