#ifndef _ERRNO_H
#define _ERRNO_H

#ifdef __cplusplus
extern "C" {
#endif

extern int errno;
int *__errno_location(void);

// Error codes (glibc numbering for portability).  C standard requires
// EDOM, ERANGE, EILSEQ; the rest are common POSIX-style codes that
// real-world code expects to find even on a minimal runtime.
#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     // I/O 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 ENOMEM  12    // Out of 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    // 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    // Not a typewriter
#define ETXTBSY 26    // Text file busy
#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    // Math argument out of domain (C standard)
#define ERANGE  34    // Math result out of range (C standard)
#define ENAMETOOLONG 36   // Filename too long
#define ENOSYS  38    // Function not implemented
#define ENOTEMPTY 39  // Directory not empty
#define ELOOP   40    // Too many symbolic links
#define EILSEQ  84    // Illegal byte sequence (C standard)

#ifdef __cplusplus
}
#endif

#endif
