gojs: ensures Mkdir(path, 0) works (#1208)
Go has a test that forces us to handle Mkdir with zero as its permissions. In GOOS=js, the result of fs.mkdir is a file descriptor, and to open that, we can't use literally 0. Hence, to solve this we need to coerce 0 to 0500 in GOOS=js. Signed-off-by: Adrian Cole <adrian@tetrate.io>
This commit is contained in:
@@ -454,6 +454,10 @@ func (jsfsMkdir) invoke(ctx context.Context, mod api.Module, args ...interface{}
|
|||||||
|
|
||||||
var fd uint32
|
var fd uint32
|
||||||
var err error
|
var err error
|
||||||
|
// We need at least read access to open the file descriptor
|
||||||
|
if perm == 0 {
|
||||||
|
perm = 0o0500
|
||||||
|
}
|
||||||
if err = root.Mkdir(path, fs.FileMode(perm)); err == nil {
|
if err = root.Mkdir(path, fs.FileMode(perm)); err == nil {
|
||||||
fd, err = fsc.OpenFile(root, path, os.O_RDONLY, 0)
|
fd, err = fsc.OpenFile(root, path, os.O_RDONLY, 0)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -286,6 +286,10 @@ func writeVal(w logging.Writer, name string, val interface{}) {
|
|||||||
w.WriteString(name) //nolint
|
w.WriteString(name) //nolint
|
||||||
w.WriteString("_len=") //nolint
|
w.WriteString("_len=") //nolint
|
||||||
writeI32(w, uint32(len(b.Unwrap()))) //nolint
|
writeI32(w, uint32(len(b.Unwrap()))) //nolint
|
||||||
|
} else if name == "perm" {
|
||||||
|
w.WriteString("perm=") //nolint
|
||||||
|
perm := goos.ValueToUint32(val)
|
||||||
|
w.WriteString(fs.FileMode(perm).String()) //nolint
|
||||||
} else {
|
} else {
|
||||||
w.WriteString(name) //nolint
|
w.WriteString(name) //nolint
|
||||||
w.WriteByte('=') //nolint
|
w.WriteByte('=') //nolint
|
||||||
|
|||||||
13
internal/gojs/testdata/writefs/main.go
vendored
13
internal/gojs/testdata/writefs/main.go
vendored
@@ -15,8 +15,7 @@ func Main() {
|
|||||||
// Create a test directory
|
// Create a test directory
|
||||||
dir := path.Join(os.TempDir(), "dir")
|
dir := path.Join(os.TempDir(), "dir")
|
||||||
dir1 := path.Join(os.TempDir(), "dir1")
|
dir1 := path.Join(os.TempDir(), "dir1")
|
||||||
err := os.Mkdir(dir, 0o700)
|
if err := os.Mkdir(dir, 0o700); err != nil {
|
||||||
if err != nil {
|
|
||||||
log.Panicln(err)
|
log.Panicln(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -25,8 +24,7 @@ func Main() {
|
|||||||
// Create a test file in that directory
|
// Create a test file in that directory
|
||||||
file := path.Join(dir, "file")
|
file := path.Join(dir, "file")
|
||||||
file1 := path.Join(os.TempDir(), "file1")
|
file1 := path.Join(os.TempDir(), "file1")
|
||||||
err = os.WriteFile(file, []byte{}, 0o600)
|
if err := os.WriteFile(file, []byte{}, 0o600); err != nil {
|
||||||
if err != nil {
|
|
||||||
log.Panicln(err)
|
log.Panicln(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -277,4 +275,11 @@ func Main() {
|
|||||||
log.Panicln(err)
|
log.Panicln(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ensure we can use zero as is used in TestRemoveReadOnlyDir
|
||||||
|
if err = os.Mkdir(dir1, 0); err != nil {
|
||||||
|
log.Panicln(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer os.Remove(dir)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user