summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1996-07-24 00:51:51 (GMT)
committerGuido van Rossum <guido@python.org>1996-07-24 00:51:51 (GMT)
commit4dc66220574d68a89a62cf64a5114b8fea877997 (patch)
treef384c464864e314e536022a7b18d97bdebaaeaa6
parentdfe8ad969c368cf6230087d03e000a0843a74068 (diff)
downloadcpython-4dc66220574d68a89a62cf64a5114b8fea877997.zip
cpython-4dc66220574d68a89a62cf64a5114b8fea877997.tar.gz
cpython-4dc66220574d68a89a62cf64a5114b8fea877997.tar.bz2
Added Sam Rushing's errno module
-rw-r--r--Modules/Setup.in1
-rw-r--r--Modules/errnomodule.c561
2 files changed, 562 insertions, 0 deletions
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 <errno.h>
+
+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
+}