github.com/bananabytelabs/wazero@v0.0.0-20240105073314-54b22a776da8/experimental/sys/errno.go (about) 1 package sys 2 3 import "strconv" 4 5 // Errno is a subset of POSIX errno used by wazero interfaces. Zero is not an 6 // error. Other values should not be interpreted numerically, rather by constants 7 // prefixed with 'E'. 8 // 9 // See https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/errno.h.html 10 type Errno uint16 11 12 // ^-- Note: This will eventually move to the public /sys package. It is 13 // experimental until we audit the socket related APIs to ensure we have all 14 // the Errno it returns, and we export fs.FS. This is not in /internal/sys as 15 // that would introduce a package cycle. 16 17 // This is a subset of errors to reduce implementation burden. `wasip1` defines 18 // almost all POSIX error numbers, but not all are used in practice. wazero 19 // will add ones needed in POSIX order, as needed by functions that explicitly 20 // document returning them. 21 // 22 // https://github.com/WebAssembly/WASI/blob/snapshot-01/phases/snapshot/docs.md#-errno-enumu16 23 const ( 24 EACCES Errno = iota + 1 25 EAGAIN 26 EBADF 27 EEXIST 28 EFAULT 29 EINTR 30 EINVAL 31 EIO 32 EISDIR 33 ELOOP 34 ENAMETOOLONG 35 ENOENT 36 ENOSYS 37 ENOTDIR 38 ERANGE 39 ENOTEMPTY 40 ENOTSOCK 41 ENOTSUP 42 EPERM 43 EROFS 44 45 // NOTE ENOTCAPABLE is defined in wasip1, but not in POSIX. wasi-libc 46 // converts it to EBADF, ESPIPE or EINVAL depending on the call site. 47 // It isn't known if compilers who don't use ENOTCAPABLE would crash on it. 48 ) 49 50 // Error implements error 51 func (e Errno) Error() string { 52 switch e { 53 case 0: // not an error 54 return "success" 55 case EACCES: 56 return "permission denied" 57 case EAGAIN: 58 return "resource unavailable, try again" 59 case EBADF: 60 return "bad file descriptor" 61 case EEXIST: 62 return "file exists" 63 case EFAULT: 64 return "bad address" 65 case EINTR: 66 return "interrupted function" 67 case EINVAL: 68 return "invalid argument" 69 case EIO: 70 return "input/output error" 71 case EISDIR: 72 return "is a directory" 73 case ELOOP: 74 return "too many levels of symbolic links" 75 case ENAMETOOLONG: 76 return "filename too long" 77 case ENOENT: 78 return "no such file or directory" 79 case ENOSYS: 80 return "functionality not supported" 81 case ENOTDIR: 82 return "not a directory or a symbolic link to a directory" 83 case ERANGE: 84 return "result too large" 85 case ENOTEMPTY: 86 return "directory not empty" 87 case ENOTSOCK: 88 return "not a socket" 89 case ENOTSUP: 90 return "not supported (may be the same value as [EOPNOTSUPP])" 91 case EPERM: 92 return "operation not permitted" 93 case EROFS: 94 return "read-only file system" 95 default: 96 return "Errno(" + strconv.Itoa(int(e)) + ")" 97 } 98 }