]> granicus.if.org Git - python/commitdiff
Jack Jansen:
authorGuido van Rossum <guido@python.org>
Wed, 26 Apr 2000 20:40:13 +0000 (20:40 +0000)
committerGuido van Rossum <guido@python.org>
Wed, 26 Apr 2000 20:40:13 +0000 (20:40 +0000)
This patch is a workaround for Macintosh, where the GUSI I/O library
(time, stat, etc) use the MacOS epoch of 1-Jan-1904 and the MSL C
library (ctime, localtime, etc) uses the (apparently ANSI standard)
epoch of 1-Jan-1900. Python programs see the MacOS epoch and we
convert values when needed.

Modules/timemodule.c

index b01366a239ba9b15cc47ca9fd11a1f301396a372..7d5317972a0baccb433398833726649778f88732 100644 (file)
@@ -41,6 +41,14 @@ PERFORMANCE OF THIS SOFTWARE.
 
 #ifdef macintosh
 #include <time.h>
+#include <OSUtils.h>
+#ifdef USE_GUSI2
+/* GUSI, the I/O library which has the time() function and such uses the
+** Mac epoch of 1904. MSL, the C library which has localtime() and so uses
+** the ANSI epoch of 1900.
+*/
+#define GUSI_TO_MSL_EPOCH (4*365*24*60*60)
+#endif /* USE_GUSI2 */
 #else
 #include <sys/types.h>
 #endif
@@ -271,6 +279,9 @@ time_convert(when, function)
 {
        struct tm *p;
        errno = 0;
+#if defined(macintosh) && defined(USE_GUSI2)
+       when = when + GUSI_TO_MSL_EPOCH;
+#endif
        p = function(&when);
        if (p == NULL) {
 #ifdef EINVAL
@@ -480,6 +491,9 @@ time_ctime(self, args)
        if (!PyArg_Parse(args, "d", &dt))
                return NULL;
        tt = (time_t)dt;
+#if defined(macintosh) && defined(USE_GUSI2)
+       tt = tt + GUSI_TO_MSL_EPOCH;
+#endif
        p = ctime(&tt);
        if (p == NULL) {
                PyErr_SetString(PyExc_ValueError, "unconvertible time");
@@ -517,6 +531,9 @@ time_mktime(self, args)
                                 "mktime argument out of range");
                return NULL;
        }
+#if defined(macintosh) && defined(USE_GUSI2)
+       tt = tt - GUSI_TO_MSL_EPOCH;
+#endif
        return PyFloat_FromDouble((double)tt);
 }