summaryrefslogtreecommitdiff
path: root/vendor/github.com/tetratelabs/wazero/experimental/sys/errno.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/tetratelabs/wazero/experimental/sys/errno.go')
-rw-r--r--vendor/github.com/tetratelabs/wazero/experimental/sys/errno.go98
1 files changed, 98 insertions, 0 deletions
diff --git a/vendor/github.com/tetratelabs/wazero/experimental/sys/errno.go b/vendor/github.com/tetratelabs/wazero/experimental/sys/errno.go
new file mode 100644
index 000000000..238949496
--- /dev/null
+++ b/vendor/github.com/tetratelabs/wazero/experimental/sys/errno.go
@@ -0,0 +1,98 @@
+package sys
+
+import "strconv"
+
+// Errno is a subset of POSIX errno used by wazero interfaces. Zero is not an
+// error. Other values should not be interpreted numerically, rather by constants
+// prefixed with 'E'.
+//
+// See https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html
+type Errno uint16
+
+// ^-- Note: This will eventually move to the public /sys package. It is
+// experimental until we audit the socket related APIs to ensure we have all
+// the Errno it returns, and we export fs.FS. This is not in /internal/sys as
+// that would introduce a package cycle.
+
+// This is a subset of errors to reduce implementation burden. `wasip1` defines
+// almost all POSIX error numbers, but not all are used in practice. wazero
+// will add ones needed in POSIX order, as needed by functions that explicitly
+// document returning them.
+//
+// https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-errno-enumu16
+const (
+ EACCES Errno = iota + 1
+ EAGAIN
+ EBADF
+ EEXIST
+ EFAULT
+ EINTR
+ EINVAL
+ EIO
+ EISDIR
+ ELOOP
+ ENAMETOOLONG
+ ENOENT
+ ENOSYS
+ ENOTDIR
+ ERANGE
+ ENOTEMPTY
+ ENOTSOCK
+ ENOTSUP
+ EPERM
+ EROFS
+
+ // NOTE ENOTCAPABLE is defined in wasip1, but not in POSIX. wasi-libc
+ // converts it to EBADF, ESPIPE or EINVAL depending on the call site.
+ // It isn't known if compilers who don't use ENOTCAPABLE would crash on it.
+)
+
+// Error implements error
+func (e Errno) Error() string {
+ switch e {
+ case 0: // not an error
+ return "success"
+ case EACCES:
+ return "permission denied"
+ case EAGAIN:
+ return "resource unavailable, try again"
+ case EBADF:
+ return "bad file descriptor"
+ case EEXIST:
+ return "file exists"
+ case EFAULT:
+ return "bad address"
+ case EINTR:
+ return "interrupted function"
+ case EINVAL:
+ return "invalid argument"
+ case EIO:
+ return "input/output error"
+ case EISDIR:
+ return "is a directory"
+ case ELOOP:
+ return "too many levels of symbolic links"
+ case ENAMETOOLONG:
+ return "filename too long"
+ case ENOENT:
+ return "no such file or directory"
+ case ENOSYS:
+ return "functionality not supported"
+ case ENOTDIR:
+ return "not a directory or a symbolic link to a directory"
+ case ERANGE:
+ return "result too large"
+ case ENOTEMPTY:
+ return "directory not empty"
+ case ENOTSOCK:
+ return "not a socket"
+ case ENOTSUP:
+ return "not supported (may be the same value as [EOPNOTSUPP])"
+ case EPERM:
+ return "operation not permitted"
+ case EROFS:
+ return "read-only file system"
+ default:
+ return "Errno(" + strconv.Itoa(int(e)) + ")"
+ }
+}