| // 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 |
| // 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", |
| 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 |
| } |