From 4dc66220574d68a89a62cf64a5114b8fea877997 Mon Sep 17 00:00:00 2001 From: Guido van Rossum Date: Wed, 24 Jul 1996 00:51:51 +0000 Subject: Added Sam Rushing's errno module --- Modules/Setup.in | 1 + Modules/errnomodule.c | 561 ++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 562 insertions(+) create mode 100644 Modules/errnomodule.c diff --git a/Modules/Setup.in b/Modules/Setup.in index 0656265..9b7c917 100644 --- a/Modules/Setup.in +++ b/Modules/Setup.in @@ -76,6 +76,7 @@ PYTHONPATH=$(COREPYTHONPATH) # Some modules that are normally always on: posix posixmodule.c # posix (UNIX) system calls +errno errnomodule.c # posix (UNIX) errno values signal signalmodule.c # signal(2) # The SGI specific GL module: diff --git a/Modules/errnomodule.c b/Modules/errnomodule.c new file mode 100644 index 0000000..a3a3fd0 --- /dev/null +++ b/Modules/errnomodule.c @@ -0,0 +1,561 @@ +/*********************************************************** +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 not be used in advertising or publicity pertaining to +distribution of the software without specific, written prior permission. + +STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO +THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM 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" + +/* + * Pull in the system error definitions + */ + +#include + +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 +} -- cgit v0.12