summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>1993-12-24 10:32:00 (GMT)
committerGuido van Rossum <guido@python.org>1993-12-24 10:32:00 (GMT)
commitbe0e9420a1673b7b3991d7eec843d75219a84f34 (patch)
tree8044f57b7dbcea72fb2f695c3f0cb0a005faa461 /Python
parent2e1d433e4357a5a980a96f15b3802138a064fb64 (diff)
downloadcpython-be0e9420a1673b7b3991d7eec843d75219a84f34.zip
cpython-be0e9420a1673b7b3991d7eec843d75219a84f34.tar.gz
cpython-be0e9420a1673b7b3991d7eec843d75219a84f34.tar.bz2
New files.
Diffstat (limited to 'Python')
-rw-r--r--Python/dup2.c31
-rw-r--r--Python/getmtime.c41
-rw-r--r--Python/memmove.c51
-rw-r--r--Python/mystrtoul.c156
4 files changed, 279 insertions, 0 deletions
diff --git a/Python/dup2.c b/Python/dup2.c
new file mode 100644
index 0000000..85ec5d5
--- /dev/null
+++ b/Python/dup2.c
@@ -0,0 +1,31 @@
+/*
+ * Public domain dup2() lookalike
+ * by Curtis Jackson @ AT&T Technologies, Burlington, NC
+ * electronic address: burl!rcj
+ *
+ * dup2 performs the following functions:
+ *
+ * Check to make sure that fd1 is a valid open file descriptor.
+ * Check to see if fd2 is already open; if so, close it.
+ * Duplicate fd1 onto fd2; checking to make sure fd2 is a valid fd.
+ * Return fd2 if all went well; return BADEXIT otherwise.
+ */
+
+#include <fcntl.h>
+
+#define BADEXIT -1
+
+int
+dup2(fd1, fd2)
+int fd1, fd2;
+{
+ if (fd1 != fd2) {
+ if (fcntl(fd1, F_GETFL) < 0)
+ return BADEXIT;
+ if (fcntl(fd2, F_GETFL) >= 0)
+ close(fd2);
+ if (fcntl(fd1, F_DUPFD, fd2) < 0)
+ return BADEXIT;
+ }
+ return fd2;
+}
diff --git a/Python/getmtime.c b/Python/getmtime.c
new file mode 100644
index 0000000..931da64
--- /dev/null
+++ b/Python/getmtime.c
@@ -0,0 +1,41 @@
+/***********************************************************
+Copyright 1991, 1992, 1993 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.
+
+******************************************************************/
+
+/* Subroutine to get the last modification time of a file */
+
+/* (A separate file because this may be OS dependent) */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+
+long
+getmtime(path)
+ char *path;
+{
+ struct stat st;
+ if (stat(path, &st) != 0)
+ return -1;
+ else
+ return st.st_mtime;
+}
diff --git a/Python/memmove.c b/Python/memmove.c
new file mode 100644
index 0000000..e812751
--- /dev/null
+++ b/Python/memmove.c
@@ -0,0 +1,51 @@
+/***********************************************************
+Copyright 1991, 1992, 1993 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.
+
+******************************************************************/
+
+/* A perhaps slow but I hope correct implementation of memmove */
+
+extern char *memcpy();
+
+char *
+memmove(dst, src, n)
+ char *dst;
+ char *src;
+ int n;
+{
+ char *realdst = dst;
+ if (n <= 0)
+ return dst;
+ if (src >= dst+n || dst >= src+n)
+ return memcpy(dst, src, n);
+ if (src > dst) {
+ while (--n >= 0)
+ *dst++ = *src++;
+ }
+ else if (src < dst) {
+ src += n;
+ dst += n;
+ while (--n >= 0)
+ *--dst = *--src;
+ }
+ return realdst;
+}
diff --git a/Python/mystrtoul.c b/Python/mystrtoul.c
new file mode 100644
index 0000000..965421b
--- /dev/null
+++ b/Python/mystrtoul.c
@@ -0,0 +1,156 @@
+/***********************************************************
+Copyright 1991, 1992, 1993 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.
+
+******************************************************************/
+
+/*
+** strtoul
+** This is a general purpose routine for converting
+** an ascii string to an integer in an arbitrary base.
+** Leading white space is ignored. If 'base' is zero
+** it looks for a leading 0, 0x or 0X to tell which
+** base. If these are absent it defaults to 10.
+** Base must be 0 or between 2 and 36 (inclusive).
+** If 'ptr' is non-NULL it will contain a pointer to
+** the end of the scan.
+** Errors due to bad pointers will probably result in
+** exceptions - we don't check for them.
+*/
+
+#include <ctype.h>
+#include <errno.h>
+
+unsigned long
+strtoul(str, ptr, base)
+register char * str;
+char ** ptr;
+int base;
+{
+ register unsigned long result; /* return value of the function */
+ register int c; /* current input character */
+ register unsigned long temp; /* used in overflow testing */
+ int ovf; /* true if overflow occurred */
+
+ result = 0;
+ ovf = 0;
+
+/* catch silly bases */
+ if (base != 0 && (base < 2 || base > 36))
+ {
+ if (ptr)
+ *ptr = str;
+ return 0;
+ }
+
+/* skip leading white space */
+ while (*str && isspace(*str))
+ str++;
+
+/* check for leading 0 or 0x for auto-base or base 16 */
+ switch (base)
+ {
+ case 0: /* look for leading 0, 0x or 0X */
+ if (*str == '0')
+ {
+ str++;
+ if (*str == 'x' || *str == 'X')
+ {
+ str++;
+ base = 16;
+ }
+ else
+ base = 8;
+ }
+ else
+ base = 10;
+ break;
+
+ case 16: /* skip leading 0x or 0X */
+ if (*str == '0' && (*(str+1) == 'x' || *(str+1) == 'X'))
+ str += 2;
+ break;
+ }
+
+/* do the conversion */
+ while (c = *str)
+ {
+ if (isdigit(c) && c - '0' < base)
+ c -= '0';
+ else
+ {
+ if (isupper(c))
+ c = tolower(c);
+ if (c >= 'a' && c <= 'z')
+ c -= 'a' - 10;
+ else /* non-"digit" character */
+ break;
+ if (c >= base) /* non-"digit" character */
+ break;
+ }
+ temp = result;
+ result = result * base + c;
+ if ((result - c) / base != temp) /* overflow */
+ ovf = 1;
+ str++;
+ }
+
+/* set pointer to point to the last character scanned */
+ if (ptr)
+ *ptr = str;
+ if (ovf)
+ {
+ result = ~0;
+ errno = ERANGE;
+ }
+ return result;
+}
+
+long
+strtol(str, ptr, base)
+char * str;
+char ** ptr;
+int base;
+{
+ long result;
+ char sign;
+
+ while (*str && isspace(*str))
+ str++;
+
+ sign = *str;
+ if (sign == '+' || sign == '-')
+ str++;
+
+ result = (long) strtoul(str, ptr, base);
+
+ /* Signal overflow if the result appears negative,
+ except for the largest negative integer */
+ if (result < 0 && !(sign == '-' && result == -result)) {
+ errno = ERANGE;
+ result = 0x7fffffff;
+ }
+
+ if (sign == '-')
+ result = -result;
+
+ return result;
+}