summaryrefslogtreecommitdiff
path: root/vendor/github.com/tetratelabs/wazero/internal/wasip1/errno.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/tetratelabs/wazero/internal/wasip1/errno.go')
-rw-r--r--vendor/github.com/tetratelabs/wazero/internal/wasip1/errno.go314
1 files changed, 314 insertions, 0 deletions
diff --git a/vendor/github.com/tetratelabs/wazero/internal/wasip1/errno.go b/vendor/github.com/tetratelabs/wazero/internal/wasip1/errno.go
new file mode 100644
index 000000000..028573d2f
--- /dev/null
+++ b/vendor/github.com/tetratelabs/wazero/internal/wasip1/errno.go
@@ -0,0 +1,314 @@
+package wasip1
+
+import (
+ "fmt"
+
+ "github.com/tetratelabs/wazero/experimental/sys"
+)
+
+// Errno is neither uint16 nor an alias for parity with wasm.ValueType.
+type Errno = uint32
+
+// ErrnoName returns the POSIX error code name, except ErrnoSuccess, which is
+// not an error. e.g. Errno2big -> "E2BIG"
+func ErrnoName(errno uint32) string {
+ if int(errno) < len(errnoToString) {
+ return errnoToString[errno]
+ }
+ return fmt.Sprintf("errno(%d)", errno)
+}
+
+// Note: Below prefers POSIX symbol names over WASI ones, even if the docs are from WASI.
+// See https://linux.die.net/man/3/errno
+// See https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#variants-1
+const (
+ // ErrnoSuccess No error occurred. System call completed successfully.
+ ErrnoSuccess Errno = iota
+ // Errno2big Argument list too long.
+ Errno2big
+ // ErrnoAcces Permission denied.
+ ErrnoAcces
+ // ErrnoAddrinuse Address in use.
+ ErrnoAddrinuse
+ // ErrnoAddrnotavail Address not available.
+ ErrnoAddrnotavail
+ // ErrnoAfnosupport Address family not supported.
+ ErrnoAfnosupport
+ // ErrnoAgain Resource unavailable, or operation would block.
+ ErrnoAgain
+ // ErrnoAlready Connection already in progress.
+ ErrnoAlready
+ // ErrnoBadf Bad file descriptor.
+ ErrnoBadf
+ // ErrnoBadmsg Bad message.
+ ErrnoBadmsg
+ // ErrnoBusy Device or resource busy.
+ ErrnoBusy
+ // ErrnoCanceled Operation canceled.
+ ErrnoCanceled
+ // ErrnoChild No child processes.
+ ErrnoChild
+ // ErrnoConnaborted Connection aborted.
+ ErrnoConnaborted
+ // ErrnoConnrefused Connection refused.
+ ErrnoConnrefused
+ // ErrnoConnreset Connection reset.
+ ErrnoConnreset
+ // ErrnoDeadlk Resource deadlock would occur.
+ ErrnoDeadlk
+ // ErrnoDestaddrreq Destination address required.
+ ErrnoDestaddrreq
+ // ErrnoDom Mathematics argument out of domain of function.
+ ErrnoDom
+ // ErrnoDquot Reserved.
+ ErrnoDquot
+ // ErrnoExist File exists.
+ ErrnoExist
+ // ErrnoFault Bad address.
+ ErrnoFault
+ // ErrnoFbig File too large.
+ ErrnoFbig
+ // ErrnoHostunreach Host is unreachable.
+ ErrnoHostunreach
+ // ErrnoIdrm Identifier removed.
+ ErrnoIdrm
+ // ErrnoIlseq Illegal byte sequence.
+ ErrnoIlseq
+ // ErrnoInprogress Operation in progress.
+ ErrnoInprogress
+ // ErrnoIntr Interrupted function.
+ ErrnoIntr
+ // ErrnoInval Invalid argument.
+ ErrnoInval
+ // ErrnoIo I/O error.
+ ErrnoIo
+ // ErrnoIsconn Socket is connected.
+ ErrnoIsconn
+ // ErrnoIsdir Is a directory.
+ ErrnoIsdir
+ // ErrnoLoop Too many levels of symbolic links.
+ ErrnoLoop
+ // ErrnoMfile File descriptor value too large.
+ ErrnoMfile
+ // ErrnoMlink Too many links.
+ ErrnoMlink
+ // ErrnoMsgsize Message too large.
+ ErrnoMsgsize
+ // ErrnoMultihop Reserved.
+ ErrnoMultihop
+ // ErrnoNametoolong Filename too long.
+ ErrnoNametoolong
+ // ErrnoNetdown Network is down.
+ ErrnoNetdown
+ // ErrnoNetreset Connection aborted by network.
+ ErrnoNetreset
+ // ErrnoNetunreach Network unreachable.
+ ErrnoNetunreach
+ // ErrnoNfile Too many files open in system.
+ ErrnoNfile
+ // ErrnoNobufs No buffer space available.
+ ErrnoNobufs
+ // ErrnoNodev No such device.
+ ErrnoNodev
+ // ErrnoNoent No such file or directory.
+ ErrnoNoent
+ // ErrnoNoexec Executable file format error.
+ ErrnoNoexec
+ // ErrnoNolck No locks available.
+ ErrnoNolck
+ // ErrnoNolink Reserved.
+ ErrnoNolink
+ // ErrnoNomem Not enough space.
+ ErrnoNomem
+ // ErrnoNomsg No message of the desired type.
+ ErrnoNomsg
+ // ErrnoNoprotoopt No message of the desired type.
+ ErrnoNoprotoopt
+ // ErrnoNospc No space left on device.
+ ErrnoNospc
+ // ErrnoNosys function not supported.
+ ErrnoNosys
+ // ErrnoNotconn The socket is not connected.
+ ErrnoNotconn
+ // ErrnoNotdir Not a directory or a symbolic link to a directory.
+ ErrnoNotdir
+ // ErrnoNotempty Directory not empty.
+ ErrnoNotempty
+ // ErrnoNotrecoverable State not recoverable.
+ ErrnoNotrecoverable
+ // ErrnoNotsock Not a socket.
+ ErrnoNotsock
+ // ErrnoNotsup Not supported, or operation not supported on socket.
+ ErrnoNotsup
+ // ErrnoNotty Inappropriate I/O control operation.
+ ErrnoNotty
+ // ErrnoNxio No such device or address.
+ ErrnoNxio
+ // ErrnoOverflow Value too large to be stored in data type.
+ ErrnoOverflow
+ // ErrnoOwnerdead Previous owner died.
+ ErrnoOwnerdead
+ // ErrnoPerm Operation not permitted.
+ ErrnoPerm
+ // ErrnoPipe Broken pipe.
+ ErrnoPipe
+ // ErrnoProto Protocol error.
+ ErrnoProto
+ // ErrnoProtonosupport Protocol error.
+ ErrnoProtonosupport
+ // ErrnoPrototype Protocol wrong type for socket.
+ ErrnoPrototype
+ // ErrnoRange Result too large.
+ ErrnoRange
+ // ErrnoRofs Read-only file system.
+ ErrnoRofs
+ // ErrnoSpipe Invalid seek.
+ ErrnoSpipe
+ // ErrnoSrch No such process.
+ ErrnoSrch
+ // ErrnoStale Reserved.
+ ErrnoStale
+ // ErrnoTimedout Connection timed out.
+ ErrnoTimedout
+ // ErrnoTxtbsy Text file busy.
+ ErrnoTxtbsy
+ // ErrnoXdev Cross-device link.
+ ErrnoXdev
+
+ // Note: ErrnoNotcapable was removed by WASI maintainers.
+ // See https://github.com/WebAssembly/wasi-libc/pull/294
+)
+
+var errnoToString = [...]string{
+ "ESUCCESS",
+ "E2BIG",
+ "EACCES",
+ "EADDRINUSE",
+ "EADDRNOTAVAIL",
+ "EAFNOSUPPORT",
+ "EAGAIN",
+ "EALREADY",
+ "EBADF",
+ "EBADMSG",
+ "EBUSY",
+ "ECANCELED",
+ "ECHILD",
+ "ECONNABORTED",
+ "ECONNREFUSED",
+ "ECONNRESET",
+ "EDEADLK",
+ "EDESTADDRREQ",
+ "EDOM",
+ "EDQUOT",
+ "EEXIST",
+ "EFAULT",
+ "EFBIG",
+ "EHOSTUNREACH",
+ "EIDRM",
+ "EILSEQ",
+ "EINPROGRESS",
+ "EINTR",
+ "EINVAL",
+ "EIO",
+ "EISCONN",
+ "EISDIR",
+ "ELOOP",
+ "EMFILE",
+ "EMLINK",
+ "EMSGSIZE",
+ "EMULTIHOP",
+ "ENAMETOOLONG",
+ "ENETDOWN",
+ "ENETRESET",
+ "ENETUNREACH",
+ "ENFILE",
+ "ENOBUFS",
+ "ENODEV",
+ "ENOENT",
+ "ENOEXEC",
+ "ENOLCK",
+ "ENOLINK",
+ "ENOMEM",
+ "ENOMSG",
+ "ENOPROTOOPT",
+ "ENOSPC",
+ "ENOSYS",
+ "ENOTCONN",
+ "ENOTDIR",
+ "ENOTEMPTY",
+ "ENOTRECOVERABLE",
+ "ENOTSOCK",
+ "ENOTSUP",
+ "ENOTTY",
+ "ENXIO",
+ "EOVERFLOW",
+ "EOWNERDEAD",
+ "EPERM",
+ "EPIPE",
+ "EPROTO",
+ "EPROTONOSUPPORT",
+ "EPROTOTYPE",
+ "ERANGE",
+ "EROFS",
+ "ESPIPE",
+ "ESRCH",
+ "ESTALE",
+ "ETIMEDOUT",
+ "ETXTBSY",
+ "EXDEV",
+ "ENOTCAPABLE",
+}
+
+// ToErrno coerces the error to a WASI Errno.
+//
+// Note: Coercion isn't centralized in sys.FSContext because ABI use different
+// error codes. For example, wasi-filesystem doesn't map to these
+// Errno.
+func ToErrno(errno sys.Errno) Errno {
+ switch errno {
+ case 0:
+ return ErrnoSuccess
+ case sys.EACCES:
+ return ErrnoAcces
+ case sys.EAGAIN:
+ return ErrnoAgain
+ case sys.EBADF:
+ return ErrnoBadf
+ case sys.EEXIST:
+ return ErrnoExist
+ case sys.EFAULT:
+ return ErrnoFault
+ case sys.EINTR:
+ return ErrnoIntr
+ case sys.EINVAL:
+ return ErrnoInval
+ case sys.EIO:
+ return ErrnoIo
+ case sys.EISDIR:
+ return ErrnoIsdir
+ case sys.ELOOP:
+ return ErrnoLoop
+ case sys.ENAMETOOLONG:
+ return ErrnoNametoolong
+ case sys.ENOENT:
+ return ErrnoNoent
+ case sys.ENOSYS:
+ return ErrnoNosys
+ case sys.ENOTDIR:
+ return ErrnoNotdir
+ case sys.ERANGE:
+ return ErrnoRange
+ case sys.ENOTEMPTY:
+ return ErrnoNotempty
+ case sys.ENOTSOCK:
+ return ErrnoNotsock
+ case sys.ENOTSUP:
+ return ErrnoNotsup
+ case sys.EPERM:
+ return ErrnoPerm
+ case sys.EROFS:
+ return ErrnoRofs
+ default:
+ return ErrnoIo
+ }
+}