difftastic/vendored_parsers/tree-sitter-hare/example/errno.ha

424 lines
13 KiB
Plaintext

// Represents an error returned from the Linux kernel.
export type errno = int!;
// Given an integer error number, wraps it in an error type.
export fn wrap_errno(err: int) errno = err: errno;
// Checks the return value from a Linux syscall and, if found to be in error,
// returns the appropriate error. Otherwise, returns the original value.
fn wrap_return(r: u64) (errno | u64) = {
if (r > -4096u64) {
return (-(r: i64)): int: errno;
};
return r;
};
// Obtains a human-friendly reading of an [errno] (e.g. "Operation not
// permitted").
export fn strerror(err: errno) str = {
return switch (err: int) {
EPERM => "Operation not permitted",
ENOENT => "No such file or directory",
ESRCH => "No such process",
EINTR => "Interrupted system call",
EIO => "Input/output error",
ENXIO => "No such device or address",
E2BIG => "Argument list too long",
ENOEXEC => "Exec format error",
EBADF => "Bad file descriptor",
ECHILD => "No child processes",
EAGAIN => "Resource temporarily unavailable",
ENOMEM => "Cannot allocate memory",
EACCES => "Permission denied",
EFAULT => "Bad address",
ENOTBLK => "Block device required",
EBUSY => "Device or resource busy",
EEXIST => "File exists",
EXDEV => "Invalid cross-device link",
ENODEV => "No such device",
ENOTDIR => "Not a directory",
EISDIR => "Is a directory",
EINVAL => "Invalid argument",
ENFILE => "Too many open files in system",
EMFILE => "Too many open files",
ENOTTY => "Inappropriate ioctl for device",
ETXTBSY => "Text file busy",
EFBIG => "File too large",
ENOSPC => "No space left on device",
ESPIPE => "Illegal seek",
EROFS => "Read-only file system",
EMLINK => "Too many links",
EPIPE => "Broken pipe",
EDOM => "Numerical argument out of domain",
ERANGE => "Numerical result out of range",
EDEADLK => "Resource deadlock avoided",
ENAMETOOLONG => "File name too long",
ENOLCK => "No locks available",
ENOSYS => "Function not implemented",
ENOTEMPTY => "Directory not empty",
ELOOP => "Too many levels of symbolic links",
ENOMSG => "No message of desired type",
EIDRM => "Identifier removed",
ECHRNG => "Channel number out of range",
EL2NSYNC => "Level 2 not synchronized",
EL3HLT => "Level 3 halted",
EL3RST => "Level 3 reset",
ELNRNG => "Link number out of range",
EUNATCH => "Protocol driver not attached",
ENOCSI => "No CSI structure available",
EL2HLT => "Level 2 halted",
EBADE => "Invalid exchange",
EBADR => "Invalid request descriptor",
EXFULL => "Exchange full",
ENOANO => "No anode",
EBADRQC => "Invalid request code",
EBADSLT => "Invalid slot",
EBFONT => "Bad font file format",
ENOSTR => "Device not a stream",
ENODATA => "No data available",
ETIME => "Timer expired",
ENOSR => "Out of streams resources",
ENONET => "Machine is not on the network",
ENOPKG => "Package not installed",
EREMOTE => "Object is remote",
ENOLINK => "Link has been severed",
EADV => "Advertise error",
ESRMNT => "Srmount error",
ECOMM => "Communication error on send",
EPROTO => "Protocol error",
EMULTIHOP => "Multihop attempted",
EDOTDOT => "RFS specific error",
EBADMSG => "Bad message",
EOVERFLOW => "Value too large for defined data type",
ENOTUNIQ => "Name not unique on network",
EBADFD => "File descriptor in bad state",
EREMCHG => "Remote address changed",
ELIBACC => "Can not access a needed shared library",
ELIBBAD => "Accessing a corrupted shared library",
ELIBSCN => ".lib section in a.out corrupted",
ELIBMAX => "Attempting to link in too many shared libraries",
ELIBEXEC => "Cannot exec a shared library directly",
EILSEQ => "Invalid or incomplete multibyte or wide character",
ERESTART => "Interrupted system call should be restarted",
ESTRPIPE => "Streams pipe error",
EUSERS => "Too many users",
ENOTSOCK => "Socket operation on non-socket",
EDESTADDRREQ => "Destination address required",
EMSGSIZE => "Message too long",
EPROTOTYPE => "Protocol wrong type for socket",
ENOPROTOOPT => "Protocol not available",
EPROTONOSUPPORT => "Protocol not supported",
ESOCKTNOSUPPORT => "Socket type not supported",
EOPNOTSUPP => "Operation not supported",
EPFNOSUPPORT => "Protocol family not supported",
EAFNOSUPPORT => "Address family not supported by protocol",
EADDRINUSE => "Address already in use",
EADDRNOTAVAIL => "Cannot assign requested address",
ENETDOWN => "Network is down",
ENETUNREACH => "Network is unreachable",
ENETRESET => "Network dropped connection on reset",
ECONNABORTED => "Software caused connection abort",
ECONNRESET => "Connection reset by peer",
ENOBUFS => "No buffer space available",
EISCONN => "Transport endpoint is already connected",
ENOTCONN => "Transport endpoint is not connected",
ESHUTDOWN => "Cannot send after transport endpoint shutdown",
ETOOMANYREFS => "Too many references: cannot splice",
ETIMEDOUT => "Connection timed out",
ECONNREFUSED => "Connection refused",
EHOSTDOWN => "Host is down",
EHOSTUNREACH => "No route to host",
EALREADY => "Operation already in progress",
EINPROGRESS => "Operation now in progress",
ESTALE => "Stale file handle",
EUCLEAN => "Structure needs cleaning",
ENOTNAM => "Not a XENIX named type file",
ENAVAIL => "No XENIX semaphores available",
EISNAM => "Is a named type file",
EREMOTEIO => "Remote I/O error",
EDQUOT => "Disk quota exceeded",
ENOMEDIUM => "No medium found",
EMEDIUMTYPE => "Wrong medium type",
ECANCELED => "Operation canceled",
ENOKEY => "Required key not available",
EKEYEXPIRED => "Key has expired",
EKEYREVOKED => "Key has been revoked",
EKEYREJECTED => "Key was rejected by service",
EOWNERDEAD => "Owner died",
ENOTRECOVERABLE => "State not recoverable",
ERFKILL => "Operation not possible due to RF-kill",
EHWPOISON => "Memory page has hardware error",
* => "Unknown Linux error code", // TODO: snprintf to add errno?
};
};
// Gets the programmer-friendly name for an [errno] (e.g. EPERM).
export fn errname(err: errno) str = {
return switch (err: int) {
EPERM => "EPERM",
ENOENT => "ENOENT",
ESRCH => "ESRCH",
EINTR => "EINTR",
EIO => "EIO",
ENXIO => "ENXIO",
E2BIG => "E2BIG",
ENOEXEC => "ENOEXEC",
EBADF => "EBADF",
ECHILD => "ECHILD",
EAGAIN => "EAGAIN",
ENOMEM => "ENOMEM",
EACCES => "EACCES",
EFAULT => "EFAULT",
ENOTBLK => "ENOTBLK",
EBUSY => "EBUSY",
EEXIST => "EEXIST",
EXDEV => "EXDEV",
ENODEV => "ENODEV",
ENOTDIR => "ENOTDIR",
EISDIR => "EISDIR",
EINVAL => "EINVAL",
ENFILE => "ENFILE",
EMFILE => "EMFILE",
ENOTTY => "ENOTTY",
ETXTBSY => "ETXTBSY",
EFBIG => "EFBIG",
ENOSPC => "ENOSPC",
ESPIPE => "ESPIPE",
EROFS => "EROFS",
EMLINK => "EMLINK",
EPIPE => "EPIPE",
EDOM => "EDOM",
ERANGE => "ERANGE",
EDEADLK => "EDEADLK",
ENAMETOOLONG => "ENAMETOOLONG",
ENOLCK => "ENOLCK",
ENOSYS => "ENOSYS",
ENOTEMPTY => "ENOTEMPTY",
ELOOP => "ELOOP",
ENOMSG => "ENOMSG",
EIDRM => "EIDRM",
ECHRNG => "ECHRNG",
EL2NSYNC => "EL2NSYNC",
EL3HLT => "EL3HLT",
EL3RST => "EL3RST",
ELNRNG => "ELNRNG",
EUNATCH => "EUNATCH",
ENOCSI => "ENOCSI",
EL2HLT => "EL2HLT",
EBADE => "EBADE",
EBADR => "EBADR",
EXFULL => "EXFULL",
ENOANO => "ENOANO",
EBADRQC => "EBADRQC",
EBADSLT => "EBADSLT",
EBFONT => "EBFONT",
ENOSTR => "ENOSTR",
ENODATA => "ENODATA",
ETIME => "ETIME",
ENOSR => "ENOSR",
ENONET => "ENONET",
ENOPKG => "ENOPKG",
EREMOTE => "EREMOTE",
ENOLINK => "ENOLINK",
EADV => "EADV",
ESRMNT => "ESRMNT",
ECOMM => "ECOMM",
EPROTO => "EPROTO",
EMULTIHOP => "EMULTIHOP",
EDOTDOT => "EDOTDOT",
EBADMSG => "EBADMSG",
EOVERFLOW => "EOVERFLOW",
ENOTUNIQ => "ENOTUNIQ",
EBADFD => "EBADFD",
EREMCHG => "EREMCHG",
ELIBACC => "ELIBACC",
ELIBBAD => "ELIBBAD",
ELIBSCN => "ELIBSCN",
ELIBMAX => "ELIBMAX",
ELIBEXEC => "ELIBEXEC",
EILSEQ => "EILSEQ",
ERESTART => "ERESTART",
ESTRPIPE => "ESTRPIPE",
EUSERS => "EUSERS",
ENOTSOCK => "ENOTSOCK",
EDESTADDRREQ => "EDESTADDRREQ",
EMSGSIZE => "EMSGSIZE",
EPROTOTYPE => "EPROTOTYPE",
ENOPROTOOPT => "ENOPROTOOPT",
EPROTONOSUPPORT => "EPROTONOSUPPORT",
ESOCKTNOSUPPORT => "ESOCKTNOSUPPORT",
EOPNOTSUPP => "EOPNOTSUPP",
EPFNOSUPPORT => "EPFNOSUPPORT",
EAFNOSUPPORT => "EAFNOSUPPORT",
EADDRINUSE => "EADDRINUSE",
EADDRNOTAVAIL => "EADDRNOTAVAIL",
ENETDOWN => "ENETDOWN",
ENETUNREACH => "ENETUNREACH",
ENETRESET => "ENETRESET",
ECONNABORTED => "ECONNABORTED",
ECONNRESET => "ECONNRESET",
ENOBUFS => "ENOBUFS",
EISCONN => "EISCONN",
ENOTCONN => "ENOTCONN",
ESHUTDOWN => "ESHUTDOWN",
ETOOMANYREFS => "ETOOMANYREFS",
ETIMEDOUT => "ETIMEDOUT",
ECONNREFUSED => "ECONNREFUSED",
EHOSTDOWN => "EHOSTDOWN",
EHOSTUNREACH => "EHOSTUNREACH",
EALREADY => "EALREADY",
EINPROGRESS => "EINPROGRESS",
ESTALE => "ESTALE",
EUCLEAN => "EUCLEAN",
ENOTNAM => "ENOTNAM",
ENAVAIL => "ENAVAIL",
EISNAM => "EISNAM",
EREMOTEIO => "EREMOTEIO",
EDQUOT => "EDQUOT",
ENOMEDIUM => "ENOMEDIUM",
EMEDIUMTYPE => "EMEDIUMTYPE",
ECANCELED => "ECANCELED",
ENOKEY => "ENOKEY",
EKEYEXPIRED => "EKEYEXPIRED",
EKEYREVOKED => "EKEYREVOKED",
EKEYREJECTED => "EKEYREJECTED",
EOWNERDEAD => "EOWNERDEAD",
ENOTRECOVERABLE => "ENOTRECOVERABLE",
ERFKILL => "ERFKILL",
EHWPOISON => "EHWPOISON",
* => "[unknown errno]", // TODO: snprintf to add errno?
};
};
export def EPERM: int = 1;
export def ENOENT: int = 2;
export def ESRCH: int = 3;
export def EINTR: int = 4;
export def EIO: int = 5;
export def ENXIO: int = 6;
export def E2BIG: int = 7;
export def ENOEXEC: int = 8;
export def EBADF: int = 9;
export def ECHILD: int = 10;
export def EAGAIN: int = 11;
export def ENOMEM: int = 12;
export def EACCES: int = 13;
export def EFAULT: int = 14;
export def ENOTBLK: int = 15;
export def EBUSY: int = 16;
export def EEXIST: int = 17;
export def EXDEV: int = 18;
export def ENODEV: int = 19;
export def ENOTDIR: int = 20;
export def EISDIR: int = 21;
export def EINVAL: int = 22;
export def ENFILE: int = 23;
export def EMFILE: int = 24;
export def ENOTTY: int = 25;
export def ETXTBSY: int = 26;
export def EFBIG: int = 27;
export def ENOSPC: int = 28;
export def ESPIPE: int = 29;
export def EROFS: int = 30;
export def EMLINK: int = 31;
export def EPIPE: int = 32;
export def EDOM: int = 33;
export def ERANGE: int = 34;
export def EDEADLK: int = 35;
export def ENAMETOOLONG: int = 36;
export def ENOLCK: int = 37;
export def ENOSYS: int = 38;
export def ENOTEMPTY: int = 39;
export def ELOOP: int = 40;
export def ENOMSG: int = 42;
export def EIDRM: int = 43;
export def ECHRNG: int = 44;
export def EL2NSYNC: int = 45;
export def EL3HLT: int = 46;
export def EL3RST: int = 47;
export def ELNRNG: int = 48;
export def EUNATCH: int = 49;
export def ENOCSI: int = 50;
export def EL2HLT: int = 51;
export def EBADE: int = 52;
export def EBADR: int = 53;
export def EXFULL: int = 54;
export def ENOANO: int = 55;
export def EBADRQC: int = 56;
export def EBADSLT: int = 57;
export def EBFONT: int = 59;
export def ENOSTR: int = 60;
export def ENODATA: int = 61;
export def ETIME: int = 62;
export def ENOSR: int = 63;
export def ENONET: int = 64;
export def ENOPKG: int = 65;
export def EREMOTE: int = 66;
export def ENOLINK: int = 67;
export def EADV: int = 68;
export def ESRMNT: int = 69;
export def ECOMM: int = 70;
export def EPROTO: int = 71;
export def EMULTIHOP: int = 72;
export def EDOTDOT: int = 73;
export def EBADMSG: int = 74;
export def EOVERFLOW: int = 75;
export def ENOTUNIQ: int = 76;
export def EBADFD: int = 77;
export def EREMCHG: int = 78;
export def ELIBACC: int = 79;
export def ELIBBAD: int = 80;
export def ELIBSCN: int = 81;
export def ELIBMAX: int = 82;
export def ELIBEXEC: int = 83;
export def EILSEQ: int = 84;
export def ERESTART: int = 85;
export def ESTRPIPE: int = 86;
export def EUSERS: int = 87;
export def ENOTSOCK: int = 88;
export def EDESTADDRREQ: int = 89;
export def EMSGSIZE: int = 90;
export def EPROTOTYPE: int = 91;
export def ENOPROTOOPT: int = 92;
export def EPROTONOSUPPORT: int = 93;
export def ESOCKTNOSUPPORT: int = 94;
export def EOPNOTSUPP: int = 95;
export def EPFNOSUPPORT: int = 96;
export def EAFNOSUPPORT: int = 97;
export def EADDRINUSE: int = 98;
export def EADDRNOTAVAIL: int = 99;
export def ENETDOWN: int = 100;
export def ENETUNREACH: int = 101;
export def ENETRESET: int = 102;
export def ECONNABORTED: int = 103;
export def ECONNRESET: int = 104;
export def ENOBUFS: int = 105;
export def EISCONN: int = 106;
export def ENOTCONN: int = 107;
export def ESHUTDOWN: int = 108;
export def ETOOMANYREFS: int = 109;
export def ETIMEDOUT: int = 110;
export def ECONNREFUSED: int = 111;
export def EHOSTDOWN: int = 112;
export def EHOSTUNREACH: int = 113;
export def EALREADY: int = 114;
export def EINPROGRESS: int = 115;
export def ESTALE: int = 116;
export def EUCLEAN: int = 117;
export def ENOTNAM: int = 118;
export def ENAVAIL: int = 119;
export def EISNAM: int = 120;
export def EREMOTEIO: int = 121;
export def EDQUOT: int = 122;
export def ENOMEDIUM: int = 123;
export def EMEDIUMTYPE: int = 124;
export def ECANCELED: int = 125;
export def ENOKEY: int = 126;
export def EKEYEXPIRED: int = 127;
export def EKEYREVOKED: int = 128;
export def EKEYREJECTED: int = 129;
export def EOWNERDEAD: int = 130;
export def ENOTRECOVERABLE: int = 131;
export def ERFKILL: int = 132;
export def EHWPOISON: int = 133;