37 lines
1.5 KiB
Go
37 lines
1.5 KiB
Go
// Package sysfs includes a low-level filesystem interface and utilities needed
|
|
// for WebAssembly host functions (ABI) such as WASI and runtime.GOOS=js.
|
|
//
|
|
// The name sysfs was chosen because wazero's public API has a "sys" package,
|
|
// which was named after https://github.com/golang/sys.
|
|
//
|
|
// This tracked in https://github.com/tetratelabs/wazero/issues/1013
|
|
package sysfs
|
|
|
|
import (
|
|
experimentalsys "github.com/tetratelabs/wazero/experimental/sys"
|
|
"github.com/tetratelabs/wazero/internal/sysfs"
|
|
)
|
|
|
|
// AdaptFS adapts the input to sys.FS. Use DirFS instead of adapting an
|
|
// os.DirFS as it handles interop issues such as windows support.
|
|
//
|
|
// Note: This performs no flag verification on OpenFile. sys.FS cannot read
|
|
// flags as there is no parameter to pass them through with. Moreover, sys.FS
|
|
// documentation does not require the file to be present. In summary, we can't
|
|
// enforce flag behavior.
|
|
type AdaptFS = sysfs.AdaptFS
|
|
|
|
// DirFS is like os.DirFS except it returns sys.FS, which has more features.
|
|
func DirFS(dir string) experimentalsys.FS {
|
|
return sysfs.DirFS(dir)
|
|
}
|
|
|
|
// ReadFS is used to mask an existing sys.FS for reads. Notably, this allows
|
|
// the CLI to do read-only mounts of directories the host user can write, but
|
|
// doesn't want the guest wasm to. For example, Python libraries shouldn't be
|
|
// written to at runtime by the python wasm file.
|
|
//
|
|
// Note: This implements read-only by returning sys.EROFS or sys.EBADF,
|
|
// depending on the operation that require write access.
|
|
type ReadFS = sysfs.ReadFS
|