diff options
| author | 2024-05-27 15:46:15 +0000 | |
|---|---|---|
| committer | 2024-05-27 17:46:15 +0200 | |
| commit | 1e7b32490dfdccddd04f46d4b0416b48d749d51b (patch) | |
| tree | 62a11365933a5a11e0800af64cbdf9172e5e6e7a /vendor/github.com/tetratelabs/wazero/internal/fsapi | |
| parent | [chore] Small styling + link issues (#2933) (diff) | |
| download | gotosocial-1e7b32490dfdccddd04f46d4b0416b48d749d51b.tar.xz | |
[experiment] add alternative wasm sqlite3 implementation available via build-tag (#2863)
This allows for building GoToSocial with [SQLite transpiled to WASM](https://github.com/ncruces/go-sqlite3) and accessed through [Wazero](https://wazero.io/).
Diffstat (limited to 'vendor/github.com/tetratelabs/wazero/internal/fsapi')
3 files changed, 116 insertions, 0 deletions
| diff --git a/vendor/github.com/tetratelabs/wazero/internal/fsapi/file.go b/vendor/github.com/tetratelabs/wazero/internal/fsapi/file.go new file mode 100644 index 000000000..0640b2271 --- /dev/null +++ b/vendor/github.com/tetratelabs/wazero/internal/fsapi/file.go @@ -0,0 +1,69 @@ +package fsapi + +import experimentalsys "github.com/tetratelabs/wazero/experimental/sys" + +// File includes methods not yet ready to document for end users, notably +// non-blocking functionality. +// +// Particularly, Poll is subject to debate. For example, whether a user should +// be able to choose how to implement timeout or not. Currently, this interface +// allows the user to choose to sleep or use native polling, and which choice +// they make impacts thread behavior as summarized here: +// https://github.com/tetratelabs/wazero/pull/1606#issuecomment-1665475516 +type File interface { +	experimentalsys.File + +	// IsNonblock returns true if the file was opened with O_NONBLOCK, or +	// SetNonblock was successfully enabled on this file. +	// +	// # Notes +	// +	//   - This might not match the underlying state of the file descriptor if +	//     the file was not opened via OpenFile. +	IsNonblock() bool + +	// SetNonblock toggles the non-blocking mode (O_NONBLOCK) of this file. +	// +	// # Errors +	// +	// A zero Errno is success. The below are expected otherwise: +	//   - ENOSYS: the implementation does not support this function. +	//   - EBADF: the file or directory was closed. +	// +	// # Notes +	// +	//   - This is like syscall.SetNonblock and `fcntl` with O_NONBLOCK in +	//     POSIX. See https://pubs.opengroup.org/onlinepubs/9699919799/functions/fcntl.html +	SetNonblock(enable bool) experimentalsys.Errno + +	// Poll returns if the file has data ready to be read or written. +	// +	// # Parameters +	// +	// The `flag` parameter determines which event to await, such as POLLIN, +	// POLLOUT, or a combination like `POLLIN|POLLOUT`. +	// +	// The `timeoutMillis` parameter is how long to block for an event, or +	// interrupted, in milliseconds. There are two special values: +	//   - zero returns immediately +	//   - any negative value blocks any amount of time +	// +	// # Results +	// +	// `ready` means there was data ready to read or written. False can mean no +	// event was ready or `errno` is not zero. +	// +	// A zero `errno` is success. The below are expected otherwise: +	//   - ENOSYS: the implementation does not support this function. +	//   - ENOTSUP: the implementation does not the flag combination. +	//   - EINTR: the call was interrupted prior to an event. +	// +	// # Notes +	// +	//   - This is like `poll` in POSIX, for a single file. +	//     See https://pubs.opengroup.org/onlinepubs/9699919799/functions/poll.html +	//   - No-op files, such as those which read from /dev/null, should return +	//     immediately true, as data will never become available. +	//   - See /RATIONALE.md for detailed notes including impact of blocking. +	Poll(flag Pflag, timeoutMillis int32) (ready bool, errno experimentalsys.Errno) +} diff --git a/vendor/github.com/tetratelabs/wazero/internal/fsapi/poll.go b/vendor/github.com/tetratelabs/wazero/internal/fsapi/poll.go new file mode 100644 index 000000000..25f7c5711 --- /dev/null +++ b/vendor/github.com/tetratelabs/wazero/internal/fsapi/poll.go @@ -0,0 +1,20 @@ +package fsapi + +// Pflag are bit flags used for File.Poll. Values, including zero, should not +// be interpreted numerically. Instead, use by constants prefixed with 'POLL'. +// +// # Notes +// +//   - This is like `pollfd.events` flags for `poll` in POSIX. See +//     https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/poll.h.html +type Pflag uint32 + +// Only define bitflags we support and are needed by `poll_oneoff` in wasip1 +// See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#eventrwflags +const ( +	// POLLIN is a read event. +	POLLIN Pflag = 1 << iota + +	// POLLOUT is a write event. +	POLLOUT +) diff --git a/vendor/github.com/tetratelabs/wazero/internal/fsapi/unimplemented.go b/vendor/github.com/tetratelabs/wazero/internal/fsapi/unimplemented.go new file mode 100644 index 000000000..99d9c2db3 --- /dev/null +++ b/vendor/github.com/tetratelabs/wazero/internal/fsapi/unimplemented.go @@ -0,0 +1,27 @@ +package fsapi + +import experimentalsys "github.com/tetratelabs/wazero/experimental/sys" + +func Adapt(f experimentalsys.File) File { +	if f, ok := f.(File); ok { +		return f +	} +	return unimplementedFile{f} +} + +type unimplementedFile struct{ experimentalsys.File } + +// IsNonblock implements File.IsNonblock +func (unimplementedFile) IsNonblock() bool { +	return false +} + +// SetNonblock implements File.SetNonblock +func (unimplementedFile) SetNonblock(bool) experimentalsys.Errno { +	return experimentalsys.ENOSYS +} + +// Poll implements File.Poll +func (unimplementedFile) Poll(Pflag, int32) (ready bool, errno experimentalsys.Errno) { +	return false, experimentalsys.ENOSYS +} | 
