| // Copyright 2018 The gVisor Authors. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| package linux |
| |
| // Errno represents a Linux errno value. |
| type Errno struct { |
| number int |
| name string |
| } |
| |
| // Number returns the errno number. |
| func (e *Errno) Number() int { |
| return e.number |
| } |
| |
| // String implements fmt.Stringer.String. |
| func (e *Errno) String() string { |
| return e.name |
| } |
| |
| // Errno values from include/uapi/asm-generic/errno-base.h. |
| var ( |
| EPERM = &Errno{1, "operation not permitted"} |
| ENOENT = &Errno{2, "no such file or directory"} |
| ESRCH = &Errno{3, "no such process"} |
| EINTR = &Errno{4, "interrupted system call"} |
| EIO = &Errno{5, "I/O error"} |
| ENXIO = &Errno{6, "no such device or address"} |
| E2BIG = &Errno{7, "argument list too long"} |
| ENOEXEC = &Errno{8, "exec format error"} |
| EBADF = &Errno{9, "bad file number"} |
| ECHILD = &Errno{10, "no child processes"} |
| EAGAIN = &Errno{11, "try again"} |
| ENOMEM = &Errno{12, "out of memory"} |
| EACCES = &Errno{13, "permission denied"} |
| EFAULT = &Errno{14, "bad address"} |
| ENOTBLK = &Errno{15, "block device required"} |
| EBUSY = &Errno{16, "device or resource busy"} |
| EEXIST = &Errno{17, "file exists"} |
| EXDEV = &Errno{18, "cross-device link"} |
| ENODEV = &Errno{19, "no such device"} |
| ENOTDIR = &Errno{20, "not a directory"} |
| EISDIR = &Errno{21, "is a directory"} |
| EINVAL = &Errno{22, "invalid argument"} |
| ENFILE = &Errno{23, "file table overflow"} |
| EMFILE = &Errno{24, "too many open files"} |
| ENOTTY = &Errno{25, "not a typewriter"} |
| ETXTBSY = &Errno{26, "text file busy"} |
| EFBIG = &Errno{27, "file too large"} |
| ENOSPC = &Errno{28, "no space left on device"} |
| ESPIPE = &Errno{29, "illegal seek"} |
| EROFS = &Errno{30, "read-only file system"} |
| EMLINK = &Errno{31, "too many links"} |
| EPIPE = &Errno{32, "broken pipe"} |
| EDOM = &Errno{33, "math argument out of domain of func"} |
| ERANGE = &Errno{34, "math result not representable"} |
| ) |
| |
| // Errno values from include/uapi/asm-generic/errno.h. |
| var ( |
| EDEADLK = &Errno{35, "resource deadlock would occur"} |
| ENAMETOOLONG = &Errno{36, "file name too long"} |
| ENOLCK = &Errno{37, "no record locks available"} |
| ENOSYS = &Errno{38, "invalid system call number"} |
| ENOTEMPTY = &Errno{39, "directory not empty"} |
| ELOOP = &Errno{40, "too many symbolic links encountered"} |
| EWOULDBLOCK = &Errno{EAGAIN.number, "operation would block"} |
| ENOMSG = &Errno{42, "no message of desired type"} |
| EIDRM = &Errno{43, "identifier removed"} |
| ECHRNG = &Errno{44, "channel number out of range"} |
| EL2NSYNC = &Errno{45, "level 2 not synchronized"} |
| EL3HLT = &Errno{46, "level 3 halted"} |
| EL3RST = &Errno{47, "level 3 reset"} |
| ELNRNG = &Errno{48, "link number out of range"} |
| EUNATCH = &Errno{49, "protocol driver not attached"} |
| ENOCSI = &Errno{50, "no CSI structure available"} |
| EL2HLT = &Errno{51, "level 2 halted"} |
| EBADE = &Errno{52, "invalid exchange"} |
| EBADR = &Errno{53, "invalid request descriptor"} |
| EXFULL = &Errno{54, "exchange full"} |
| ENOANO = &Errno{55, "no anode"} |
| EBADRQC = &Errno{56, "invalid request code"} |
| EBADSLT = &Errno{57, "invalid slot"} |
| EDEADLOCK = EDEADLK |
| EBFONT = &Errno{59, "bad font file format"} |
| ENOSTR = &Errno{60, "device not a stream"} |
| ENODATA = &Errno{61, "no data available"} |
| ETIME = &Errno{62, "timer expired"} |
| ENOSR = &Errno{63, "out of streams resources"} |
| ENONET = &Errno{64, "machine is not on the network"} |
| ENOPKG = &Errno{65, "package not installed"} |
| EREMOTE = &Errno{66, "object is remote"} |
| ENOLINK = &Errno{67, "link has been severed"} |
| EADV = &Errno{68, "advertise error"} |
| ESRMNT = &Errno{69, "srmount error"} |
| ECOMM = &Errno{70, "communication error on send"} |
| EPROTO = &Errno{71, "protocol error"} |
| EMULTIHOP = &Errno{72, "multihop attempted"} |
| EDOTDOT = &Errno{73, "RFS specific error"} |
| EBADMSG = &Errno{74, "not a data message"} |
| EOVERFLOW = &Errno{75, "value too large for defined data type"} |
| ENOTUNIQ = &Errno{76, "name not unique on network"} |
| EBADFD = &Errno{77, "file descriptor in bad state"} |
| EREMCHG = &Errno{78, "remote address changed"} |
| ELIBACC = &Errno{79, "can not access a needed shared library"} |
| ELIBBAD = &Errno{80, "accessing a corrupted shared library"} |
| ELIBSCN = &Errno{81, ".lib section in a.out corrupted"} |
| ELIBMAX = &Errno{82, "attempting to link in too many shared libraries"} |
| ELIBEXEC = &Errno{83, "cannot exec a shared library directly"} |
| EILSEQ = &Errno{84, "illegal byte sequence"} |
| ERESTART = &Errno{85, "interrupted system call should be restarted"} |
| ESTRPIPE = &Errno{86, "streams pipe error"} |
| EUSERS = &Errno{87, "too many users"} |
| ENOTSOCK = &Errno{88, "socket operation on non-socket"} |
| EDESTADDRREQ = &Errno{89, "destination address required"} |
| EMSGSIZE = &Errno{90, "message too long"} |
| EPROTOTYPE = &Errno{91, "protocol wrong type for socket"} |
| ENOPROTOOPT = &Errno{92, "protocol not available"} |
| EPROTONOSUPPORT = &Errno{93, "protocol not supported"} |
| ESOCKTNOSUPPORT = &Errno{94, "socket type not supported"} |
| EOPNOTSUPP = &Errno{95, "operation not supported on transport endpoint"} |
| EPFNOSUPPORT = &Errno{96, "protocol family not supported"} |
| EAFNOSUPPORT = &Errno{97, "address family not supported by protocol"} |
| EADDRINUSE = &Errno{98, "address already in use"} |
| EADDRNOTAVAIL = &Errno{99, "cannot assign requested address"} |
| ENETDOWN = &Errno{100, "network is down"} |
| ENETUNREACH = &Errno{101, "network is unreachable"} |
| ENETRESET = &Errno{102, "network dropped connection because of reset"} |
| ECONNABORTED = &Errno{103, "software caused connection abort"} |
| ECONNRESET = &Errno{104, "connection reset by peer"} |
| ENOBUFS = &Errno{105, "no buffer space available"} |
| EISCONN = &Errno{106, "transport endpoint is already connected"} |
| ENOTCONN = &Errno{107, "transport endpoint is not connected"} |
| ESHUTDOWN = &Errno{108, "cannot send after transport endpoint shutdown"} |
| ETOOMANYREFS = &Errno{109, "too many references: cannot splice"} |
| ETIMEDOUT = &Errno{110, "connection timed out"} |
| ECONNREFUSED = &Errno{111, "connection refused"} |
| EHOSTDOWN = &Errno{112, "host is down"} |
| EHOSTUNREACH = &Errno{113, "no route to host"} |
| EALREADY = &Errno{114, "operation already in progress"} |
| EINPROGRESS = &Errno{115, "operation now in progress"} |
| ESTALE = &Errno{116, "stale file handle"} |
| EUCLEAN = &Errno{117, "structure needs cleaning"} |
| ENOTNAM = &Errno{118, "not a XENIX named type file"} |
| ENAVAIL = &Errno{119, "no XENIX semaphores available"} |
| EISNAM = &Errno{120, "is a named type file"} |
| EREMOTEIO = &Errno{121, "remote I/O error"} |
| EDQUOT = &Errno{122, "quota exceeded"} |
| ENOMEDIUM = &Errno{123, "no medium found"} |
| EMEDIUMTYPE = &Errno{124, "wrong medium type"} |
| ECANCELED = &Errno{125, "operation Canceled"} |
| ENOKEY = &Errno{126, "required key not available"} |
| EKEYEXPIRED = &Errno{127, "key has expired"} |
| EKEYREVOKED = &Errno{128, "key has been revoked"} |
| EKEYREJECTED = &Errno{129, "key was rejected by service"} |
| EOWNERDEAD = &Errno{130, "owner died"} |
| ENOTRECOVERABLE = &Errno{131, "state not recoverable"} |
| ERFKILL = &Errno{132, "operation not possible due to RF-kill"} |
| EHWPOISON = &Errno{133, "memory page has hardware error"} |
| ) |