#include <errno.h>
#include "error.h"

#define X(e,s) if (i == e) return s;

char *error_str(i)
int i;
{
 X(0,"no error")
 X(error_intr,"interrupted system call")
 X(error_nomem,"out of memory")
 X(error_noent,"file does not exist")
 X(error_txtbsy,"text busy")
 X(error_io,"input/output error")
 X(error_exist,"file already exists")
 X(error_timeout,"timed out")
 X(error_inprogress,"operation in progress")
 X(error_again,"temporary failure")
 X(error_wouldblock,"input/output would block")
 X(error_pipe,"broken pipe")
 X(error_perm,"permission denied")
 X(error_acces,"access denied")
#ifdef ESRCH
 X(ESRCH,"no such process")
#endif
#ifdef ENXIO
 X(ENXIO,"device not configured")
#endif
#ifdef E2BIG
 X(E2BIG,"argument list too long")
#endif
#ifdef ENOEXEC
 X(ENOEXEC,"exec format error")
#endif
#ifdef EBADF
 X(EBADF,"file descriptor not open")
#endif
#ifdef ECHILD
 X(ECHILD,"no child processes")
#endif
#ifdef EDEADLK
 X(EDEADLK,"operation would cause deadlock")
#endif
#ifdef EFAULT
 X(EFAULT,"bad address")
#endif
#ifdef ENOTBLK
 X(ENOTBLK,"not a block device")
#endif
#ifdef EBUSY
 X(EBUSY,"device busy")
#endif
#ifdef EXDEV
 X(EXDEV,"cross-device link")
#endif
#ifdef ENODEV
 X(ENODEV,"device does not support operation")
#endif
#ifdef ENOTDIR
 X(ENOTDIR,"not a directory")
#endif
#ifdef EISDIR
 X(EISDIR,"is a directory")
#endif
#ifdef EINVAL
 X(EINVAL,"invalid argument")
#endif
#ifdef ENFILE
 X(ENFILE,"system cannot open more files")
#endif
#ifdef EMFILE
 X(EMFILE,"process cannot open more files")
#endif
#ifdef ENOTTY
 X(ENOTTY,"not a tty")
#endif
#ifdef EFBIG
 X(EFBIG,"file too big")
#endif
#ifdef ENOSPC
 X(ENOSPC,"out of disk space")
#endif
#ifdef ESPIPE
 X(ESPIPE,"unseekable descriptor")
#endif
#ifdef EROFS
 X(EROFS,"read-only file system")
#endif
#ifdef EMLINK
 X(EMLINK,"too many links")
#endif
#ifdef EDOM
 X(EDOM,"input out of range")
#endif
#ifdef ERANGE
 X(ERANGE,"output out of range")
#endif
#ifdef EALREADY
 X(EALREADY,"operation already in progress")
#endif
#ifdef ENOTSOCK
 X(ENOTSOCK,"not a socket")
#endif
#ifdef EDESTADDRREQ
 X(EDESTADDRREQ,"destination address required")
#endif
#ifdef EMSGSIZE
 X(EMSGSIZE,"message too long")
#endif
#ifdef EPROTOTYPE
 X(EPROTOTYPE,"incorrect protocol type")
#endif
#ifdef ENOPROTOOPT
 X(ENOPROTOOPT,"protocol not available")
#endif
#ifdef EPROTONOSUPPORT
 X(EPROTONOSUPPORT,"protocol not supported")
#endif
#ifdef ESOCKTNOSUPPORT
 X(ESOCKTNOSUPPORT,"socket type not supported")
#endif
#ifdef EOPNOTSUPP
 X(EOPNOTSUPP,"operation not supported")
#endif
#ifdef EPFNOSUPPORT
 X(EPFNOSUPPORT,"protocol family not supported")
#endif
#ifdef EAFNOSUPPORT
 X(EAFNOSUPPORT,"address family not supported")
#endif
#ifdef EADDRINUSE
 X(EADDRINUSE,"address already used")
#endif
#ifdef EADDRNOTAVAIL
 X(EADDRNOTAVAIL,"address not available")
#endif
#ifdef ENETDOWN
 X(ENETDOWN,"network down")
#endif
#ifdef ENETUNREACH
 X(ENETUNREACH,"network unreachable")
#endif
#ifdef ENETRESET
 X(ENETRESET,"network reset")
#endif
#ifdef ECONNABORTED
 X(ECONNABORTED,"connection aborted")
#endif
#ifdef ECONNRESET
 X(ECONNRESET,"connection reset")
#endif
#ifdef ENOBUFS
 X(ENOBUFS,"out of buffer space")
#endif
#ifdef EISCONN
 X(EISCONN,"already connected")
#endif
#ifdef ENOTCONN
 X(ENOTCONN,"not connected")
#endif
#ifdef ESHUTDOWN
 X(ESHUTDOWN,"socket shut down")
#endif
#ifdef ETOOMANYREFS
 X(ETOOMANYREFS,"too many references")
#endif
#ifdef ECONNREFUSED
 X(ECONNREFUSED,"connection refused")
#endif
#ifdef ELOOP
 X(ELOOP,"symbolic link loop")
#endif
#ifdef ENAMETOOLONG
 X(ENAMETOOLONG,"file name too long")
#endif
#ifdef EHOSTDOWN
 X(EHOSTDOWN,"host down")
#endif
#ifdef EHOSTUNREACH
 X(EHOSTUNREACH,"host unreachable")
#endif
#ifdef ENOTEMPTY
 X(ENOTEMPTY,"directory not empty")
#endif
#ifdef EPROCLIM
 X(EPROCLIM,"too many processes")
#endif
#ifdef EUSERS
 X(EUSERS,"too many users")
#endif
#ifdef EDQUOT
 X(EDQUOT,"disk quota exceeded")
#endif
#ifdef ESTALE
 X(ESTALE,"stale NFS file handle")
#endif
#ifdef EREMOTE
 X(EREMOTE,"too many levels of remote in path")
#endif
#ifdef EBADRPC
 X(EBADRPC,"RPC structure is bad")
#endif
#ifdef ERPCMISMATCH
 X(ERPCMISMATCH,"RPC version mismatch")
#endif
#ifdef EPROGUNAVAIL
 X(EPROGUNAVAIL,"RPC program unavailable")
#endif
#ifdef EPROGMISMATCH
 X(EPROGMISMATCH,"program version mismatch")
#endif
#ifdef EPROCUNAVAIL
 X(EPROCUNAVAIL,"bad procedure for program")
#endif
#ifdef ENOLCK
 X(ENOLCK,"no locks available")
#endif
#ifdef ENOSYS
 X(ENOSYS,"system call not available")
#endif
#ifdef EFTYPE
 X(EFTYPE,"bad file type")
#endif
#ifdef EAUTH
 X(EAUTH,"authentication error")
#endif
#ifdef ENEEDAUTH
 X(ENEEDAUTH,"not authenticated")
#endif
#ifdef ENOSTR
 X(ENOSTR,"not a stream device")
#endif
#ifdef ETIME
 X(ETIME,"timer expired")
#endif
#ifdef ENOSR
 X(ENOSR,"out of stream resources")
#endif
#ifdef ENOMSG
 X(ENOMSG,"no message of desired type")
#endif
#ifdef EBADMSG
 X(EBADMSG,"bad message type")
#endif
#ifdef EIDRM
 X(EIDRM,"identifier removed")
#endif
#ifdef ENONET
 X(ENONET,"machine not on network")
#endif
#ifdef ERREMOTE
 X(ERREMOTE,"object not local")
#endif
#ifdef ENOLINK
 X(ENOLINK,"link severed")
#endif
#ifdef EADV
 X(EADV,"advertise error")
#endif
#ifdef ESRMNT
 X(ESRMNT,"srmount error")
#endif
#ifdef ECOMM
 X(ECOMM,"communication error")
#endif
#ifdef EPROTO
 X(EPROTO,"protocol error")
#endif
#ifdef EMULTIHOP
 X(EMULTIHOP,"multihop attempted")
#endif
#ifdef EREMCHG
 X(EREMCHG,"remote address changed")
#endif
 return "unknown error";
}
