summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2000-04-26 20:40:13 (GMT)
committerGuido van Rossum <guido@python.org>2000-04-26 20:40:13 (GMT)
commitc410e929741252d3cfca848fcc0df616c0f225ef (patch)
tree8fa830f2de2686251b689b45e683ae6b9ef7d49c
parent9e392e2412308c7923195f226510bb1f174be215 (diff)
downloadcpython-c410e929741252d3cfca848fcc0df616c0f225ef.zip
cpython-c410e929741252d3cfca848fcc0df616c0f225ef.tar.gz
cpython-c410e929741252d3cfca848fcc0df616c0f225ef.tar.bz2
Jack Jansen:
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.
-rw-r--r--Modules/timemodule.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index b01366a..7d53179 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -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);
}