// Copyright 2023 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. //go:build wasip1 package syscall import "runtime" // TODO: Auto-generate some day. (Hard-coded in binaries so not likely to change.) const ( E2BIG Errno = 1 EACCES Errno = 2 EADDRINUSE Errno = 3 EADDRNOTAVAIL Errno = 4 EAFNOSUPPORT Errno = 5 EAGAIN Errno = 6 EALREADY Errno = 7 EBADF Errno = 8 EBADMSG Errno = 9 EBUSY Errno = 10 ECANCELED Errno = 11 ECHILD Errno = 12 ECONNABORTED Errno = 13 ECONNREFUSED Errno = 14 ECONNRESET Errno = 15 EDEADLK Errno = 16 EDESTADDRREQ Errno = 17 EDOM Errno = 18 EDQUOT Errno = 19 EEXIST Errno = 20 EFAULT Errno = 21 EFBIG Errno = 22 EHOSTUNREACH Errno = 23 EIDRM Errno = 24 EILSEQ Errno = 25 EINPROGRESS Errno = 26 EINTR Errno = 27 EINVAL Errno = 28 EIO Errno = 29 EISCONN Errno = 30 EISDIR Errno = 31 ELOOP Errno = 32 EMFILE Errno = 33 EMLINK Errno = 34 EMSGSIZE Errno = 35 EMULTIHOP Errno = 36 ENAMETOOLONG Errno = 37 ENETDOWN Errno = 38 ENETRESET Errno = 39 ENETUNREACH Errno = 40 ENFILE Errno = 41 ENOBUFS Errno = 42 ENODEV Errno = 43 ENOENT Errno = 44 ENOEXEC Errno = 45 ENOLCK Errno = 46 ENOLINK Errno = 47 ENOMEM Errno = 48 ENOMSG Errno = 49 ENOPROTOOPT Errno = 50 ENOSPC Errno = 51 ENOSYS Errno = 52 ENOTCONN Errno = 53 ENOTDIR Errno = 54 ENOTEMPTY Errno = 55 ENOTRECOVERABLE Errno = 56 ENOTSOCK Errno = 57 ENOTSUP Errno = 58 ENOTTY Errno = 59 ENXIO Errno = 60 EOVERFLOW Errno = 61 EOWNERDEAD Errno = 62 EPERM Errno = 63 EPIPE Errno = 64 EPROTO Errno = 65 EPROTONOSUPPORT Errno = 66 EPROTOTYPE Errno = 67 ERANGE Errno = 68 EROFS Errno = 69 ESPIPE Errno = 70 ESRCH Errno = 71 ESTALE Errno = 72 ETIMEDOUT Errno = 73 ETXTBSY Errno = 74 EXDEV Errno = 75 ENOTCAPABLE Errno = 76 EBADFD Errno = 77 // needed by src/net/error_unix_test.go EOPNOTSUPP = ENOTSUP ) // TODO: Auto-generate some day. (Hard-coded in binaries so not likely to change.) var errorstr = [...]string{ E2BIG: "Argument list too long", EACCES: "Permission denied", EADDRINUSE: "Address already in use", EADDRNOTAVAIL: "Address not available", EAFNOSUPPORT: "Address family not supported by protocol family", EAGAIN: "Try again", EALREADY: "Socket already connected", EBADF: "Bad file number", EBADFD: "file descriptor in bad state", EBADMSG: "Trying to read unreadable message", EBUSY: "Device or resource busy", ECANCELED: "Operation canceled.", ECHILD: "No child processes", ECONNABORTED: "Connection aborted", ECONNREFUSED: "Connection refused", ECONNRESET: "Connection reset by peer", EDEADLK: "Deadlock condition", EDESTADDRREQ: "Destination address required", EDOM: "Math arg out of domain of func", EDQUOT: "Quota exceeded", EEXIST: "File exists", EFAULT: "Bad address", EFBIG: "File too large", EHOSTUNREACH: "Host is unreachable", EIDRM: "Identifier removed", EILSEQ: "EILSEQ", EINPROGRESS: "Connection already in progress", EINTR: "Interrupted system call", EINVAL: "Invalid argument", EIO: "I/O error", EISCONN: "Socket is already connected", EISDIR: "Is a directory", ELOOP: "Too many symbolic links", EMFILE: "Too many open files", EMLINK: "Too many links", EMSGSIZE: "Message too long", EMULTIHOP: "Multihop attempted", ENAMETOOLONG: "File name too long", ENETDOWN: "Network interface is not configured", ENETRESET: "Network dropped connection on reset", ENETUNREACH: "Network is unreachable", ENFILE: "File table overflow", ENOBUFS: "No buffer space available", ENODEV: "No such device", ENOENT: "No such file or directory", ENOEXEC: "Exec format error", ENOLCK: "No record locks available", ENOLINK: "The link has been severed", ENOMEM: "Out of memory", ENOMSG: "No message of desired type", ENOPROTOOPT: "Protocol not available", ENOSPC: "No space left on device", ENOSYS: "Not implemented on " + runtime.GOOS, ENOTCONN: "Socket is not connected", ENOTDIR: "Not a directory", ENOTEMPTY: "Directory not empty", ENOTRECOVERABLE: "State not recoverable", ENOTSOCK: "Socket operation on non-socket", ENOTSUP: "Not supported", ENOTTY: "Not a typewriter", ENXIO: "No such device or address", EOVERFLOW: "Value too large for defined data type", EOWNERDEAD: "Owner died", EPERM: "Operation not permitted", EPIPE: "Broken pipe", EPROTO: "Protocol error", EPROTONOSUPPORT: "Unknown protocol", EPROTOTYPE: "Protocol wrong type for socket", ERANGE: "Math result not representable", EROFS: "Read-only file system", ESPIPE: "Illegal seek", ESRCH: "No such process", ESTALE: "Stale file handle", ETIMEDOUT: "Connection timed out", ETXTBSY: "Text file busy", EXDEV: "Cross-device link", ENOTCAPABLE: "Capabilities insufficient", } // Do the interface allocations only once for common // Errno values. var ( errEAGAIN error = EAGAIN errEINVAL error = EINVAL errENOENT error = ENOENT ) // errnoErr returns common boxed Errno values, to prevent // allocations at runtime. // // We set both noinline and nosplit to reduce code size, this function has many // call sites in the syscall package, inlining it causes a significant increase // of the compiled code; the function call ultimately does not make a difference // in the performance of syscall functions since the time is dominated by calls // to the imports and path resolution. // //go:noinline //go:nosplit func errnoErr(e Errno) error { switch e { case 0: return nil case EAGAIN: return errEAGAIN case EINVAL: return errEINVAL case ENOENT: return errENOENT } return e }