#ifndef _ERRNO_H
#define _ERRNO_H

/* The last error encountered during a call to a library or system function. */
extern int errno;

#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. Not implemented.
#define EIO 5         // Input/output error. Not implemented.
#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     // Cannot allocate memory
#define EACCES 13     // Permission denied
#define EFAULT 14     // Bad address
#define EEXIST 17     // File exists
#define ENOTDIR 20    // Not a directory
#define EISDIR 21     // Is a directory
#define EINVAL 22     // Invalid argument
#define EMFILE 24     // Too many open files
#define ENOTTY 25     // Inappropriate ioctl for device
#define EFBIG 27      // File too large. Not implemented.
#define ENOSPC 28     // No space left on device
#define EPIPE 32      // Broken pipe. Not implemented.
#define EDOM 33       // Numerical argument out of domain. Not implemented.
#define ERANGE 34     // Numerical result out of range
#define ENOSYS 38     // Function not implemented
#define ENOTSUP 95    // Operation not supported
#define EOPNOTSUPP 95 // Operation not supported

#ifdef _GNU_SOURCE // Give it only to programs that ask for it.
/* Name used to invoke calling program. Same value as argv[0] in main(), but can be used globally. */
extern char* program_invocation_name;
#endif

#endif