From fc0779a2f906900160e65d014270b895de34bf70 Mon Sep 17 00:00:00 2001 From: apio Date: Wed, 30 Nov 2022 17:10:30 +0100 Subject: [PATCH] Add a SystemError module for errno values :) --- luna/CMakeLists.txt | 1 + luna/SystemError.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++ luna/SystemError.h | 58 ++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 119 insertions(+) create mode 100644 luna/SystemError.cpp create mode 100644 luna/SystemError.h diff --git a/luna/CMakeLists.txt b/luna/CMakeLists.txt index ee20a2ce..8360aef4 100644 --- a/luna/CMakeLists.txt +++ b/luna/CMakeLists.txt @@ -3,6 +3,7 @@ set(FREESTANDING_SOURCES NumberParsing.cpp String.cpp Units.cpp + SystemError.cpp ) set(SOURCES diff --git a/luna/SystemError.cpp b/luna/SystemError.cpp new file mode 100644 index 00000000..00719b56 --- /dev/null +++ b/luna/SystemError.cpp @@ -0,0 +1,60 @@ +#include + +const char* error_string(int error) +{ + switch (error) + { + case 0: return "Success (not an error)"; + case EPERM: return "Operation not permitted"; + case ENOENT: return "No such file or directory"; + case ESRCH: return "No such process"; + case EINTR: return "Interrupted system call"; + case EIO: return "Input/output error"; + case ENXIO: return "No such device or address"; + case E2BIG: return "Argument list too long"; + case ENOEXEC: return "Exec format error"; + case EBADF: return "Bad file descriptor"; + case ECHILD: return "No child processes"; + case EAGAIN: return "Resource temporarily unavailable"; + case ENOMEM: return "Cannot allocate memory"; + case EACCES: return "Permission denied"; + case EFAULT: return "Bad address"; + case EBUSY: return "Device or resource busy"; + case EEXIST: return "File exists"; + case EXDEV: return "Invalid cross-device link"; + case ENODEV: return "No such device"; + case ENOTDIR: return "Not a directory"; + case EISDIR: return "Is a directory"; + case EINVAL: return "Invalid argument"; + case ENFILE: return "Too many open files in system"; + case EMFILE: return "Too many open files"; + case ENOTTY: return "Inappropriate ioctl for device"; + case EFBIG: return "File too large"; + case ENOSPC: return "No space left on device"; + case ESPIPE: return "Illegal seek"; + case EROFS: return "Read-only file system"; + case EMLINK: return "Too many links"; + case EPIPE: return "Broken pipe"; + case EDOM: return "Numerical argument out of domain"; + case ERANGE: return "Numerical result out of range"; + case EDEADLK: return "Resource deadlock avoided"; + case ENAMETOOLONG: return "File name too long"; + case ENOLCK: return "No locks available"; + case ENOSYS: return "Function not implemented"; + case ENOTEMPTY: return "Directory not empty"; + case ELOOP: return "Too many levels of symbolic links"; + case ENOMSG: return "No message of desired type"; + case EOVERFLOW: return "Value too large for defined data type"; + case EILSEQ: return "Invalid or incomplete multibyte or wide character"; + case ENOTSOCK: return "Socket operation on non-socket"; + case ENOTSUP: return "Operation not supported"; + case EADDRINUSE: return "Address already in use"; + case ENETRESET: return "Network dropped connection on reset"; + case ECONNRESET: return "Connection reset by peer"; + case EISCONN: return "Transport endpoint is already connected"; + case ETIMEDOUT: return "Connection timed out"; + case EALREADY: return "Operation already in progress"; + case EFIXME: return "Functionality not yet implemented"; + default: return "Unknown error"; + } +} \ No newline at end of file diff --git a/luna/SystemError.h b/luna/SystemError.h new file mode 100644 index 00000000..0c952b57 --- /dev/null +++ b/luna/SystemError.h @@ -0,0 +1,58 @@ +#pragma once + +#define EPERM 1 // Operation not permitted +#define ENOENT 2 // No such file or directory +#define ESRCH 3 // No such process +#define EINTR 4 // Interrupted system call +#define EIO 5 // Input/output error +#define ENXIO 6 // No such device or address +#define E2BIG 7 // Argument list too long +#define ENOEXEC 8 // Exec format error +#define EBADF 9 // Bad file descriptor +#define ECHILD 10 // No child processes +#define EAGAIN 11 // Resource temporarily unavailable +#define EWOULDBLOCK 11 // Resource temporarily unavailable +#define ENOMEM 12 // Cannot allocate memory +#define EACCES 13 // Permission denied +#define EFAULT 14 // Bad address +#define EBUSY 16 // Device or resource busy +#define EEXIST 17 // File exists +#define EXDEV 18 // Invalid cross-device link +#define ENODEV 19 // No such device +#define ENOTDIR 20 // Not a directory +#define EISDIR 21 // Is a directory +#define EINVAL 22 // Invalid argument +#define ENFILE 23 // Too many open files in system +#define EMFILE 24 // Too many open files +#define ENOTTY 25 // Inappropriate ioctl for device +#define EFBIG 27 // File too large +#define ENOSPC 28 // No space left on device +#define ESPIPE 29 // Illegal seek +#define EROFS 30 // Read-only file system +#define EMLINK 31 // Too many links +#define EPIPE 32 // Broken pipe +#define EDOM 33 // Numerical argument out of domain +#define ERANGE 34 // Numerical result out of range +#define EDEADLK 35 // Resource deadlock avoided +#define ENAMETOOLONG 36 // File name too long +#define ENOLCK 37 // No locks available +#define ENOSYS 38 // Function not implemented +#define ENOTEMPTY 39 // Directory not empty +#define ELOOP 40 // Too many levels of symbolic links +#define ENOMSG 42 // No message of desired type +#define EOVERFLOW 75 // Value too large for defined data type +#define EILSEQ 84 // Invalid or incomplete multibyte or wide character +#define ENOTSOCK 88 // Socket operation on non-socket +#define ENOTSUP 95 // Operation not supported +#define EOPNOTSUPP 95 // Operation not supported +#define EADDRINUSE 98 // Address already in use +#define ENETRESET 102 // Network dropped connection on reset +#define ECONNRESET 104 // Connection reset by peer +#define EISCONN 106 // Transport endpoint is already connected +#define ETIMEDOUT 110 // Connection timed out +#define EALREADY 114 // Operation already in progress + +// This one is Luna-specific. +#define EFIXME 342 // Functionality not yet implemented + +const char* error_string(int error); \ No newline at end of file