]> granicus.if.org Git - python/commitdiff
Fix time.mktime() and datetime.datetime.timestamp() on AIX
authorVictor Stinner <victor.stinner@gmail.com>
Tue, 25 Jun 2013 20:54:35 +0000 (22:54 +0200)
committerVictor Stinner <victor.stinner@gmail.com>
Tue, 25 Jun 2013 20:54:35 +0000 (22:54 +0200)
On AIX, the C function mktime() alwaysd sets tm_wday, even on error. So tm_wday
cannot be used as a sentinel to detect an error, we can only check if the
result is (time_t)-1.

Modules/_datetimemodule.c
Modules/timemodule.c

index 8f60972e7ea3e2994db492fcb559f2f53ef67796..46f38c5e823410681f70af143d884cdc2a3a9c21 100644 (file)
@@ -4873,9 +4873,16 @@ datetime_timestamp(PyDateTime_DateTime *self)
         time.tm_wday = -1;
         time.tm_isdst = -1;
         timestamp = mktime(&time);
-        /* Return value of -1 does not necessarily mean an error, but tm_wday
-         * cannot remain set to -1 if mktime succeeded. */
-        if (timestamp == (time_t)(-1) && time.tm_wday == -1) {
+        if (timestamp == (time_t)(-1)
+#ifndef _AIX
+            /* Return value of -1 does not necessarily mean an error,
+             * but tm_wday cannot remain set to -1 if mktime succeeded. */
+            && time.tm_wday == -1
+#else
+            /* on AIX, tm_wday is always sets, even on error */
+#endif
+          )
+        {
             PyErr_SetString(PyExc_OverflowError,
                             "timestamp out of range");
             return NULL;
index 4b526d4d7d12043a1f0d7720543e40b986532624..297467f7309248a32751b1bb7bec758726d4de09 100644 (file)
@@ -807,7 +807,16 @@ time_mktime(PyObject *self, PyObject *tup)
     tt = mktime(&buf);
     /* Return value of -1 does not necessarily mean an error, but tm_wday
      * cannot remain set to -1 if mktime succeeded. */
-    if (tt == (time_t)(-1) && buf.tm_wday == -1) {
+    if (tt == (time_t)(-1)
+#ifndef _AIX
+        /* Return value of -1 does not necessarily mean an error, but
+         * tm_wday cannot remain set to -1 if mktime succeeded. */
+        && buf.tm_wday == -1
+#else
+        /* on AIX, tm_wday is always sets, even on error */
+#endif
+       )
+    {
         PyErr_SetString(PyExc_OverflowError,
                         "mktime argument out of range");
         return NULL;