| /*********************************************************** |
| Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, |
| The Netherlands. |
| |
| All Rights Reserved |
| |
| Permission to use, copy, modify, and distribute this software and its |
| documentation for any purpose and without fee is hereby granted, |
| provided that the above copyright notice appear in all copies and that |
| both that copyright notice and this permission notice appear in |
| supporting documentation, and that the names of Stichting Mathematisch |
| Centrum or CWI or Corporation for National Research Initiatives or |
| CNRI not be used in advertising or publicity pertaining to |
| distribution of the software without specific, written prior |
| permission. |
| |
| While CWI is the initial source for this software, a modified version |
| is made available by the Corporation for National Research Initiatives |
| (CNRI) at the Internet address ftp://ftp.python.org. |
| |
| STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH |
| REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF |
| MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH |
| CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL |
| DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR |
| PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER |
| TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR |
| PERFORMANCE OF THIS SOFTWARE. |
| |
| ******************************************************************/ |
| |
| /* Errno module */ |
| |
| #include "Python.h" |
| |
| /* Mac with GUSI has more errors than those in errno.h */ |
| #ifdef USE_GUSI |
| #include <sys/errno.h> |
| #endif |
| |
| /* |
| * Pull in the system error definitions |
| */ |
| |
| static PyMethodDef errno_methods[] = { |
| {NULL, NULL} |
| }; |
| |
| /* |
| * Convenience routine to export an integer value. |
| * For simplicity, errors (which are unlikely anyway) are ignored. |
| */ |
| |
| static void |
| insint(d, name, value) |
| PyObject * d; |
| char * name; |
| int value; |
| { |
| PyObject *v = PyInt_FromLong((long) value); |
| if (v == NULL) { |
| /* Don't bother reporting this error */ |
| PyErr_Clear(); |
| } |
| else { |
| PyDict_SetItemString(d, name, v); |
| Py_DECREF(v); |
| } |
| } |
| |
| void |
| initerrno() |
| { |
| PyObject *m, *d; |
| m = Py_InitModule("errno", errno_methods); |
| d = PyModule_GetDict(m); |
| |
| /* |
| * The names and comments are borrowed from linux/include/errno.h, |
| * which should be pretty all-inclusive |
| */ |
| |
| #ifdef EPERM |
| /* Operation not permitted */ |
| insint(d, "EPERM", EPERM); |
| #endif |
| #ifdef ENOENT |
| /* No such file or directory */ |
| insint(d, "ENOENT", ENOENT); |
| #endif |
| #ifdef ESRCH |
| /* No such process */ |
| insint(d, "ESRCH", ESRCH); |
| #endif |
| #ifdef EINTR |
| /* Interrupted system call */ |
| insint(d, "EINTR", EINTR); |
| #endif |
| #ifdef EIO |
| /* I/O error */ |
| insint(d, "EIO", EIO); |
| #endif |
| #ifdef ENXIO |
| /* No such device or address */ |
| insint(d, "ENXIO", ENXIO); |
| #endif |
| #ifdef E2BIG |
| /* Arg list too long */ |
| insint(d, "E2BIG", E2BIG); |
| #endif |
| #ifdef ENOEXEC |
| /* Exec format error */ |
| insint(d, "ENOEXEC", ENOEXEC); |
| #endif |
| #ifdef EBADF |
| /* Bad file number */ |
| insint(d, "EBADF", EBADF); |
| #endif |
| #ifdef ECHILD |
| /* No child processes */ |
| insint(d, "ECHILD", ECHILD); |
| #endif |
| #ifdef EAGAIN |
| /* Try again */ |
| insint(d, "EAGAIN", EAGAIN); |
| #endif |
| #ifdef ENOMEM |
| /* Out of memory */ |
| insint(d, "ENOMEM", ENOMEM); |
| #endif |
| #ifdef EACCES |
| /* Permission denied */ |
| insint(d, "EACCES", EACCES); |
| #endif |
| #ifdef EFAULT |
| /* Bad address */ |
| insint(d, "EFAULT", EFAULT); |
| #endif |
| #ifdef ENOTBLK |
| /* Block device required */ |
| insint(d, "ENOTBLK", ENOTBLK); |
| #endif |
| #ifdef EBUSY |
| /* Device or resource busy */ |
| insint(d, "EBUSY", EBUSY); |
| #endif |
| #ifdef EEXIST |
| /* File exists */ |
| insint(d, "EEXIST", EEXIST); |
| #endif |
| #ifdef EXDEV |
| /* Cross-device link */ |
| insint(d, "EXDEV", EXDEV); |
| #endif |
| #ifdef ENODEV |
| /* No such device */ |
| insint(d, "ENODEV", ENODEV); |
| #endif |
| #ifdef ENOTDIR |
| /* Not a directory */ |
| insint(d, "ENOTDIR", ENOTDIR); |
| #endif |
| #ifdef EISDIR |
| /* Is a directory */ |
| insint(d, "EISDIR", EISDIR); |
| #endif |
| #ifdef EINVAL |
| /* Invalid argument */ |
| insint(d, "EINVAL", EINVAL); |
| #endif |
| #ifdef ENFILE |
| /* File table overflow */ |
| insint(d, "ENFILE", ENFILE); |
| #endif |
| #ifdef EMFILE |
| /* Too many open files */ |
| insint(d, "EMFILE", EMFILE); |
| #endif |
| #ifdef ENOTTY |
| /* Not a typewriter */ |
| insint(d, "ENOTTY", ENOTTY); |
| #endif |
| #ifdef ETXTBSY |
| /* Text file busy */ |
| insint(d, "ETXTBSY", ETXTBSY); |
| #endif |
| #ifdef EFBIG |
| /* File too large */ |
| insint(d, "EFBIG", EFBIG); |
| #endif |
| #ifdef ENOSPC |
| /* No space left on device */ |
| insint(d, "ENOSPC", ENOSPC); |
| #endif |
| #ifdef ESPIPE |
| /* Illegal seek */ |
| insint(d, "ESPIPE", ESPIPE); |
| #endif |
| #ifdef EROFS |
| /* Read-only file system */ |
| insint(d, "EROFS", EROFS); |
| #endif |
| #ifdef EMLINK |
| /* Too many links */ |
| insint(d, "EMLINK", EMLINK); |
| #endif |
| #ifdef EPIPE |
| /* Broken pipe */ |
| insint(d, "EPIPE", EPIPE); |
| #endif |
| #ifdef EDOM |
| /* Math argument out of domain of func */ |
| insint(d, "EDOM", EDOM); |
| #endif |
| #ifdef ERANGE |
| /* Math result not representable */ |
| insint(d, "ERANGE", ERANGE); |
| #endif |
| #ifdef EDEADLK |
| /* Resource deadlock would occur */ |
| insint(d, "EDEADLK", EDEADLK); |
| #endif |
| #ifdef ENAMETOOLONG |
| /* File name too long */ |
| insint(d, "ENAMETOOLONG", ENAMETOOLONG); |
| #endif |
| #ifdef ENOLCK |
| /* No record locks available */ |
| insint(d, "ENOLCK", ENOLCK); |
| #endif |
| #ifdef ENOSYS |
| /* Function not implemented */ |
| insint(d, "ENOSYS", ENOSYS); |
| #endif |
| #ifdef ENOTEMPTY |
| /* Directory not empty */ |
| insint(d, "ENOTEMPTY", ENOTEMPTY); |
| #endif |
| #ifdef ELOOP |
| /* Too many symbolic links encountered */ |
| insint(d, "ELOOP", ELOOP); |
| #endif |
| #ifdef EWOULDBLOCK |
| /* Operation would block */ |
| insint(d, "EWOULDBLOCK", EWOULDBLOCK); |
| #endif |
| #ifdef ENOMSG |
| /* No message of desired type */ |
| insint(d, "ENOMSG", ENOMSG); |
| #endif |
| #ifdef EIDRM |
| /* Identifier removed */ |
| insint(d, "EIDRM", EIDRM); |
| #endif |
| #ifdef ECHRNG |
| /* Channel number out of range */ |
| insint(d, "ECHRNG", ECHRNG); |
| #endif |
| #ifdef EL2NSYNC |
| /* Level 2 not synchronized */ |
| insint(d, "EL2NSYNC", EL2NSYNC); |
| #endif |
| #ifdef EL3HLT |
| /* Level 3 halted */ |
| insint(d, "EL3HLT", EL3HLT); |
| #endif |
| #ifdef EL3RST |
| /* Level 3 reset */ |
| insint(d, "EL3RST", EL3RST); |
| #endif |
| #ifdef ELNRNG |
| /* Link number out of range */ |
| insint(d, "ELNRNG", ELNRNG); |
| #endif |
| #ifdef EUNATCH |
| /* Protocol driver not attached */ |
| insint(d, "EUNATCH", EUNATCH); |
| #endif |
| #ifdef ENOCSI |
| /* No CSI structure available */ |
| insint(d, "ENOCSI", ENOCSI); |
| #endif |
| #ifdef EL2HLT |
| /* Level 2 halted */ |
| insint(d, "EL2HLT", EL2HLT); |
| #endif |
| #ifdef EBADE |
| /* Invalid exchange */ |
| insint(d, "EBADE", EBADE); |
| #endif |
| #ifdef EBADR |
| /* Invalid request descriptor */ |
| insint(d, "EBADR", EBADR); |
| #endif |
| #ifdef EXFULL |
| /* Exchange full */ |
| insint(d, "EXFULL", EXFULL); |
| #endif |
| #ifdef ENOANO |
| /* No anode */ |
| insint(d, "ENOANO", ENOANO); |
| #endif |
| #ifdef EBADRQC |
| /* Invalid request code */ |
| insint(d, "EBADRQC", EBADRQC); |
| #endif |
| #ifdef EBADSLT |
| /* Invalid slot */ |
| insint(d, "EBADSLT", EBADSLT); |
| #endif |
| #ifdef EDEADLOCK |
| /* File locking deadlock error */ |
| insint(d, "EDEADLOCK", EDEADLOCK); |
| #endif |
| #ifdef EBFONT |
| /* Bad font file format */ |
| insint(d, "EBFONT", EBFONT); |
| #endif |
| #ifdef ENOSTR |
| /* Device not a stream */ |
| insint(d, "ENOSTR", ENOSTR); |
| #endif |
| #ifdef ENODATA |
| /* No data available */ |
| insint(d, "ENODATA", ENODATA); |
| #endif |
| #ifdef ETIME |
| /* Timer expired */ |
| insint(d, "ETIME", ETIME); |
| #endif |
| #ifdef ENOSR |
| /* Out of streams resources */ |
| insint(d, "ENOSR", ENOSR); |
| #endif |
| #ifdef ENONET |
| /* Machine is not on the network */ |
| insint(d, "ENONET", ENONET); |
| #endif |
| #ifdef ENOPKG |
| /* Package not installed */ |
| insint(d, "ENOPKG", ENOPKG); |
| #endif |
| #ifdef EREMOTE |
| /* Object is remote */ |
| insint(d, "EREMOTE", EREMOTE); |
| #endif |
| #ifdef ENOLINK |
| /* Link has been severed */ |
| insint(d, "ENOLINK", ENOLINK); |
| #endif |
| #ifdef EADV |
| /* Advertise error */ |
| insint(d, "EADV", EADV); |
| #endif |
| #ifdef ESRMNT |
| /* Srmount error */ |
| insint(d, "ESRMNT", ESRMNT); |
| #endif |
| #ifdef ECOMM |
| /* Communication error on send */ |
| insint(d, "ECOMM", ECOMM); |
| #endif |
| #ifdef EPROTO |
| /* Protocol error */ |
| insint(d, "EPROTO", EPROTO); |
| #endif |
| #ifdef EMULTIHOP |
| /* Multihop attempted */ |
| insint(d, "EMULTIHOP", EMULTIHOP); |
| #endif |
| #ifdef EDOTDOT |
| /* RFS specific error */ |
| insint(d, "EDOTDOT", EDOTDOT); |
| #endif |
| #ifdef EBADMSG |
| /* Not a data message */ |
| insint(d, "EBADMSG", EBADMSG); |
| #endif |
| #ifdef EOVERFLOW |
| /* Value too large for defined data type */ |
| insint(d, "EOVERFLOW", EOVERFLOW); |
| #endif |
| #ifdef ENOTUNIQ |
| /* Name not unique on network */ |
| insint(d, "ENOTUNIQ", ENOTUNIQ); |
| #endif |
| #ifdef EBADFD |
| /* File descriptor in bad state */ |
| insint(d, "EBADFD", EBADFD); |
| #endif |
| #ifdef EREMCHG |
| /* Remote address changed */ |
| insint(d, "EREMCHG", EREMCHG); |
| #endif |
| #ifdef ELIBACC |
| /* Can not access a needed shared library */ |
| insint(d, "ELIBACC", ELIBACC); |
| #endif |
| #ifdef ELIBBAD |
| /* Accessing a corrupted shared library */ |
| insint(d, "ELIBBAD", ELIBBAD); |
| #endif |
| #ifdef ELIBSCN |
| /* .lib section in a.out corrupted */ |
| insint(d, "ELIBSCN", ELIBSCN); |
| #endif |
| #ifdef ELIBMAX |
| /* Attempting to link in too many shared libraries */ |
| insint(d, "ELIBMAX", ELIBMAX); |
| #endif |
| #ifdef ELIBEXEC |
| /* Cannot exec a shared library directly */ |
| insint(d, "ELIBEXEC", ELIBEXEC); |
| #endif |
| #ifdef EILSEQ |
| /* Illegal byte sequence */ |
| insint(d, "EILSEQ", EILSEQ); |
| #endif |
| #ifdef ERESTART |
| /* Interrupted system call should be restarted */ |
| insint(d, "ERESTART", ERESTART); |
| #endif |
| #ifdef ESTRPIPE |
| /* Streams pipe error */ |
| insint(d, "ESTRPIPE", ESTRPIPE); |
| #endif |
| #ifdef EUSERS |
| /* Too many users */ |
| insint(d, "EUSERS", EUSERS); |
| #endif |
| #ifdef ENOTSOCK |
| /* Socket operation on non-socket */ |
| insint(d, "ENOTSOCK", ENOTSOCK); |
| #endif |
| #ifdef EDESTADDRREQ |
| /* Destination address required */ |
| insint(d, "EDESTADDRREQ", EDESTADDRREQ); |
| #endif |
| #ifdef EMSGSIZE |
| /* Message too long */ |
| insint(d, "EMSGSIZE", EMSGSIZE); |
| #endif |
| #ifdef EPROTOTYPE |
| /* Protocol wrong type for socket */ |
| insint(d, "EPROTOTYPE", EPROTOTYPE); |
| #endif |
| #ifdef ENOPROTOOPT |
| /* Protocol not available */ |
| insint(d, "ENOPROTOOPT", ENOPROTOOPT); |
| #endif |
| #ifdef EPROTONOSUPPORT |
| /* Protocol not supported */ |
| insint(d, "EPROTONOSUPPORT", EPROTONOSUPPORT); |
| #endif |
| #ifdef ESOCKTNOSUPPORT |
| /* Socket type not supported */ |
| insint(d, "ESOCKTNOSUPPORT", ESOCKTNOSUPPORT); |
| #endif |
| #ifdef EOPNOTSUPP |
| /* Operation not supported on transport endpoint */ |
| insint(d, "EOPNOTSUPP", EOPNOTSUPP); |
| #endif |
| #ifdef EPFNOSUPPORT |
| /* Protocol family not supported */ |
| insint(d, "EPFNOSUPPORT", EPFNOSUPPORT); |
| #endif |
| #ifdef EAFNOSUPPORT |
| /* Address family not supported by protocol */ |
| insint(d, "EAFNOSUPPORT", EAFNOSUPPORT); |
| #endif |
| #ifdef EADDRINUSE |
| /* Address already in use */ |
| insint(d, "EADDRINUSE", EADDRINUSE); |
| #endif |
| #ifdef EADDRNOTAVAIL |
| /* Cannot assign requested address */ |
| insint(d, "EADDRNOTAVAIL", EADDRNOTAVAIL); |
| #endif |
| #ifdef ENETDOWN |
| /* Network is down */ |
| insint(d, "ENETDOWN", ENETDOWN); |
| #endif |
| #ifdef ENETUNREACH |
| /* Network is unreachable */ |
| insint(d, "ENETUNREACH", ENETUNREACH); |
| #endif |
| #ifdef ENETRESET |
| /* Network dropped connection because of reset */ |
| insint(d, "ENETRESET", ENETRESET); |
| #endif |
| #ifdef ECONNABORTED |
| /* Software caused connection abort */ |
| insint(d, "ECONNABORTED", ECONNABORTED); |
| #endif |
| #ifdef ECONNRESET |
| /* Connection reset by peer */ |
| insint(d, "ECONNRESET", ECONNRESET); |
| #endif |
| #ifdef ENOBUFS |
| /* No buffer space available */ |
| insint(d, "ENOBUFS", ENOBUFS); |
| #endif |
| #ifdef EISCONN |
| /* Transport endpoint is already connected */ |
| insint(d, "EISCONN", EISCONN); |
| #endif |
| #ifdef ENOTCONN |
| /* Transport endpoint is not connected */ |
| insint(d, "ENOTCONN", ENOTCONN); |
| #endif |
| #ifdef ESHUTDOWN |
| /* Cannot send after transport endpoint shutdown */ |
| insint(d, "ESHUTDOWN", ESHUTDOWN); |
| #endif |
| #ifdef ETOOMANYREFS |
| /* Too many references: cannot splice */ |
| insint(d, "ETOOMANYREFS", ETOOMANYREFS); |
| #endif |
| #ifdef ETIMEDOUT |
| /* Connection timed out */ |
| insint(d, "ETIMEDOUT", ETIMEDOUT); |
| #endif |
| #ifdef ECONNREFUSED |
| /* Connection refused */ |
| insint(d, "ECONNREFUSED", ECONNREFUSED); |
| #endif |
| #ifdef EHOSTDOWN |
| /* Host is down */ |
| insint(d, "EHOSTDOWN", EHOSTDOWN); |
| #endif |
| #ifdef EHOSTUNREACH |
| /* No route to host */ |
| insint(d, "EHOSTUNREACH", EHOSTUNREACH); |
| #endif |
| #ifdef EALREADY |
| /* Operation already in progress */ |
| insint(d, "EALREADY", EALREADY); |
| #endif |
| #ifdef EINPROGRESS |
| /* Operation now in progress */ |
| insint(d, "EINPROGRESS", EINPROGRESS); |
| #endif |
| #ifdef ESTALE |
| /* Stale NFS file handle */ |
| insint(d, "ESTALE", ESTALE); |
| #endif |
| #ifdef EUCLEAN |
| /* Structure needs cleaning */ |
| insint(d, "EUCLEAN", EUCLEAN); |
| #endif |
| #ifdef ENOTNAM |
| /* Not a XENIX named type file */ |
| insint(d, "ENOTNAM", ENOTNAM); |
| #endif |
| #ifdef ENAVAIL |
| /* No XENIX semaphores available */ |
| insint(d, "ENAVAIL", ENAVAIL); |
| #endif |
| #ifdef EISNAM |
| /* Is a named type file */ |
| insint(d, "EISNAM", EISNAM); |
| #endif |
| #ifdef EREMOTEIO |
| /* Remote I/O error */ |
| insint(d, "EREMOTEIO", EREMOTEIO); |
| #endif |
| #ifdef EDQUOT |
| /* Quota exceeded */ |
| insint(d, "EDQUOT", EDQUOT); |
| #endif |
| } |