using System.Diagnostics.CodeAnalysis;

namespace Ryujinx.HLE.Utilities
{
    [SuppressMessage("ReSharper", "InconsistentNaming")]
    enum LinuxError
    {
        SUCCESS         = 0,
        EPERM           = 1       /* Operation not permitted */,
        ENOENT          = 2       /* No such file or directory */,
        ESRCH           = 3       /* No such process */,
        EINTR           = 4       /* Interrupted system call */,
        EIO             = 5       /* I/O error */,
        ENXIO           = 6       /* No such device or address */,
        E2BIG           = 7       /* Argument list too long */,
        ENOEXEC         = 8       /* Exec format error */,
        EBADF           = 9       /* Bad file number */,
        ECHILD          = 10      /* No child processes */,
        EAGAIN          = 11      /* Try again */,
        ENOMEM          = 12      /* Out of memory */,
        EACCES          = 13      /* Permission denied */,
        EFAULT          = 14      /* Bad address */,
        ENOTBLK         = 15      /* Block device required */,
        EBUSY           = 16      /* Device or resource busy */,
        EEXIST          = 17      /* File exists */,
        EXDEV           = 18      /* Cross-device link */,
        ENODEV          = 19      /* No such device */,
        ENOTDIR         = 20      /* Not a directory */,
        EISDIR          = 21      /* Is a directory */,
        EINVAL          = 22      /* Invalid argument */,
        ENFILE          = 23      /* File table overflow */,
        EMFILE          = 24      /* Too many open files */,
        ENOTTY          = 25      /* Not a typewriter */,
        ETXTBSY         = 26      /* Text file busy */,
        EFBIG           = 27      /* File too large */,
        ENOSPC          = 28      /* No space left on device */,
        ESPIPE          = 29      /* Illegal seek */,
        EROFS           = 30      /* Read-only file system */,
        EMLINK          = 31      /* Too many links */,
        EPIPE           = 32      /* Broken pipe */,
        EDOM            = 33      /* Math argument out of domain of func */,
        ERANGE          = 34      /* Math result not representable */,
        EDEADLK         = 35      /* Resource deadlock would occur */,
        ENAMETOOLONG    = 36      /* File name too long */,
        ENOLCK          = 37      /* No record locks available */,

        /*
         * This error code is special: arch syscall entry code will return
         * -ENOSYS if users try to call a syscall that doesn't exist.  To keep
         * failures of syscalls that really do exist distinguishable from
         * failures due to attempts to use a nonexistent syscall, syscall
         * implementations should refrain from returning -ENOSYS.
         */
        ENOSYS          = 38      /* Invalid system call number */,
        ENOTEMPTY       = 39      /* Directory not empty */,
        ELOOP           = 40      /* Too many symbolic links encountered */,
        EWOULDBLOCK     = EAGAIN  /* Operation would block */,
        ENOMSG          = 42      /* No message of desired type */,
        EIDRM           = 43      /* Identifier removed */,
        ECHRNG          = 44      /* Channel number out of range */,
        EL2NSYNC        = 45      /* Level 2 not synchronized */,
        EL3HLT          = 46      /* Level 3 halted */,
        EL3RST          = 47      /* Level 3 reset */,
        ELNRNG          = 48      /* Link number out of range */,
        EUNATCH         = 49      /* Protocol driver not attached */,
        ENOCSI          = 50      /* No CSI structure available */,
        EL2HLT          = 51      /* Level 2 halted */,
        EBADE           = 52      /* Invalid exchange */,
        EBADR           = 53      /* Invalid request descriptor */,
        EXFULL          = 54      /* Exchange full */,
        ENOANO          = 55      /* No anode */,
        EBADRQC         = 56      /* Invalid request code */,
        EBADSLT         = 57      /* Invalid slot */,
        EDEADLOCK       = EDEADLK,
        EBFONT          = 59      /* Bad font file format */,
        ENOSTR          = 60      /* Device not a stream */,
        ENODATA         = 61      /* No data available */,
        ETIME           = 62      /* Timer expired */,
        ENOSR           = 63      /* Out of streams resources */,
        ENONET          = 64      /* Machine is not on the network */,
        ENOPKG          = 65      /* Package not installed */,
        EREMOTE         = 66      /* Object is remote */,
        ENOLINK         = 67      /* Link has been severed */,
        EADV            = 68      /* Advertise error */,
        ESRMNT          = 69      /* Srmount error */,
        ECOMM           = 70      /* Communication error on send */,
        EPROTO          = 71      /* Protocol error */,
        EMULTIHOP       = 72      /* Multihop attempted */,
        EDOTDOT         = 73      /* RFS specific error */,
        EBADMSG         = 74      /* Not a data message */,
        EOVERFLOW       = 75      /* Value too large for defined data type */,
        ENOTUNIQ        = 76      /* Name not unique on network */,
        EBADFD          = 77      /* File descriptor in bad state */,
        EREMCHG         = 78      /* Remote address changed */,
        ELIBACC         = 79      /* Can not access a needed shared library */,
        ELIBBAD         = 80      /* Accessing a corrupted shared library */,
        ELIBSCN         = 81      /* .lib section in a.out corrupted */,
        ELIBMAX         = 82      /* Attempting to link in too many shared libraries */,
        ELIBEXEC        = 83      /* Cannot exec a shared library directly */,
        EILSEQ          = 84      /* Illegal byte sequence */,
        ERESTART        = 85      /* Interrupted system call should be restarted */,
        ESTRPIPE        = 86      /* Streams pipe error */,
        EUSERS          = 87      /* Too many users */,
        ENOTSOCK        = 88      /* Socket operation on non-socket */,
        EDESTADDRREQ    = 89      /* Destination address required */,
        EMSGSIZE        = 90      /* Message too long */,
        EPROTOTYPE      = 91      /* Protocol wrong type for socket */,
        ENOPROTOOPT     = 92      /* Protocol not available */,
        EPROTONOSUPPORT = 93      /* Protocol not supported */,
        ESOCKTNOSUPPORT = 94      /* Socket type not supported */,
        EOPNOTSUPP      = 95      /* Operation not supported on transport endpoint */,
        EPFNOSUPPORT    = 96      /* Protocol family not supported */,
        EAFNOSUPPORT    = 97      /* Address family not supported by protocol */,
        EADDRINUSE      = 98      /* Address already in use */,
        EADDRNOTAVAIL   = 99      /* Cannot assign requested address */,
        ENETDOWN        = 100     /* Network is down */,
        ENETUNREACH     = 101     /* Network is unreachable */,
        ENETRESET       = 102     /* Network dropped connection because of reset */,
        ECONNABORTED    = 103     /* Software caused connection abort */,
        ECONNRESET      = 104     /* Connection reset by peer */,
        ENOBUFS         = 105     /* No buffer space available */,
        EISCONN         = 106     /* Transport endpoint is already connected */,
        ENOTCONN        = 107     /* Transport endpoint is not connected */,
        ESHUTDOWN       = 108     /* Cannot send after transport endpoint shutdown */,
        ETOOMANYREFS    = 109     /* Too many references: cannot splice */,
        ETIMEDOUT       = 110     /* Connection timed out */,
        ECONNREFUSED    = 111     /* Connection refused */,
        EHOSTDOWN       = 112     /* Host is down */,
        EHOSTUNREACH    = 113     /* No route to host */,
        EALREADY        = 114     /* Operation already in progress */,
        EINPROGRESS     = 115     /* Operation now in progress */,
        ESTALE          = 116     /* Stale file handle */,
        EUCLEAN         = 117     /* Structure needs cleaning */,
        ENOTNAM         = 118     /* Not a XENIX named type file */,
        ENAVAIL         = 119     /* No XENIX semaphores available */,
        EISNAM          = 120     /* Is a named type file */,
        EREMOTEIO       = 121     /* Remote I/O error */,
        EDQUOT          = 122     /* Quota exceeded */,
        ENOMEDIUM       = 123     /* No medium found */,
        EMEDIUMTYPE     = 124     /* Wrong medium type */,
        ECANCELED       = 125     /* Operation Canceled */,
        ENOKEY          = 126     /* Required key not available */,
        EKEYEXPIRED     = 127     /* Key has expired */,
        EKEYREVOKED     = 128     /* Key has been revoked */,
        EKEYREJECTED    = 129     /* Key was rejected by service */,

        /* for robust mutexes */
        EOWNERDEAD      = 130     /* Owner died */,
        ENOTRECOVERABLE = 131     /* State not recoverable */,

        ERFKILL         = 132     /* Operation not possible due to RF-kill */,

        EHWPOISON       = 133     /* Memory page has hardware error */
    }
}