Commit 9e2a4f4d authored by Richard Musiol's avatar Richard Musiol Committed by Brad Fitzpatrick

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/126600Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent 137f2fba
......@@ -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");
......
......@@ -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)
......
......@@ -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
)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment