From: Richard Musiol Date: Sat, 28 Jul 2018 11:45:02 +0000 (+0200) Subject: syscall: remove support for O_NONBLOCK and O_SYNC on js/wasm X-Git-Tag: go1.11beta3~46 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=9e2a4f4dff9a790a47729b79e857130f83e0ff6d;p=gostls13.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 Run-TryBot: Brad Fitzpatrick TryBot-Result: Gobot Gobot --- diff --git a/misc/wasm/wasm_exec.js b/misc/wasm/wasm_exec.js index 02a753c823..f3772652da 100644 --- a/misc/wasm/wasm_exec.js +++ b/misc/wasm/wasm_exec.js @@ -37,7 +37,7 @@ let outputBuf = ""; 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) { outputBuf += decoder.decode(buf); const nl = outputBuf.lastIndexOf("\n"); diff --git a/src/syscall/fs_js.go b/src/syscall/fs_js.go index 36e9140759..00d6c76979 100644 --- a/src/syscall/fs_js.go +++ b/src/syscall/fs_js.go @@ -7,6 +7,7 @@ package syscall import ( + "errors" "io" "sync" "syscall/js" @@ -20,14 +21,12 @@ var jsFS = js.Global().Get("fs") var constants = jsFS.Get("constants") var ( - nodeWRONLY = constants.Get("O_WRONLY").Int() - nodeRDWR = constants.Get("O_RDWR").Int() - nodeCREATE = constants.Get("O_CREAT").Int() - nodeTRUNC = constants.Get("O_TRUNC").Int() - nodeAPPEND = constants.Get("O_APPEND").Int() - nodeEXCL = constants.Get("O_EXCL").Int() - nodeNONBLOCK = constants.Get("O_NONBLOCK").Int() - nodeSYNC = constants.Get("O_SYNC").Int() + nodeWRONLY = constants.Get("O_WRONLY").Int() + nodeRDWR = constants.Get("O_RDWR").Int() + nodeCREATE = constants.Get("O_CREAT").Int() + nodeTRUNC = constants.Get("O_TRUNC").Int() + nodeAPPEND = constants.Get("O_APPEND").Int() + nodeEXCL = constants.Get("O_EXCL").Int() ) type jsFile struct { @@ -78,11 +77,8 @@ func Open(path string, openmode int, perm uint32) (int, error) { if openmode&O_EXCL != 0 { flags |= nodeEXCL } - if openmode&O_NONBLOCK != 0 { - flags |= nodeNONBLOCK - } 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) diff --git a/src/syscall/syscall_js.go b/src/syscall/syscall_js.go index 356d925462..6822eec835 100644 --- a/src/syscall/syscall_js.go +++ b/src/syscall/syscall_js.go @@ -103,13 +103,12 @@ const ( O_WRONLY = 1 O_RDWR = 2 - O_CREAT = 0100 - O_CREATE = O_CREAT - O_TRUNC = 01000 - O_APPEND = 02000 - O_EXCL = 0200 - O_NONBLOCK = 04000 - O_SYNC = 010000 + O_CREAT = 0100 + O_CREATE = O_CREAT + O_TRUNC = 01000 + O_APPEND = 02000 + O_EXCL = 0200 + O_SYNC = 010000 O_CLOEXEC = 0 )