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 @@ ...@@ -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 @@ ...@@ -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") ...@@ -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) { ...@@ -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 ( ...@@ -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
) )
......
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