[Python-checkins] Simplify PyInit_timezone. (GH-9323)

Benjamin Peterson webhook-mailer at python.org
Fri Sep 14 19:21:35 EDT 2018


https://github.com/python/cpython/commit/afde1c1a05cc8a1e8adf6403c451f6708509a605
commit: afde1c1a05cc8a1e8adf6403c451f6708509a605
branch: master
author: Benjamin Peterson <benjamin at python.org>
committer: GitHub <noreply at github.com>
date: 2018-09-14T16:21:32-07:00
summary:

Simplify PyInit_timezone. (GH-9323)

Assume tzname exists. Only use a hack to compute altzone if it's not defined.

files:
M Modules/timemodule.c

diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 1a4cff23d65e..b9a71b48414a 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -1522,29 +1522,6 @@ PyDoc_STRVAR(get_clock_info_doc,
 \n\
 Get information of the specified clock.");
 
-#if !defined(HAVE_TZNAME) || defined(__GLIBC__) || defined(__CYGWIN__)
-static void
-get_zone(char *zone, int n, struct tm *p)
-{
-#ifdef HAVE_STRUCT_TM_TM_ZONE
-    strncpy(zone, p->tm_zone ? p->tm_zone : "   ", n);
-#else
-    tzset();
-    strftime(zone, n, "%Z", p);
-#endif
-}
-
-static int
-get_gmtoff(time_t t, struct tm *p)
-{
-#ifdef HAVE_STRUCT_TM_TM_ZONE
-    return p->tm_gmtoff;
-#else
-    return timegm(p) - t;
-#endif
-}
-#endif /* !defined(HAVE_TZNAME) || defined(__GLIBC__) || defined(__CYGWIN__) */
-
 static void
 PyInit_timezone(PyObject *m) {
     /* This code moved from PyInit_time wholesale to allow calling it from
@@ -1563,65 +1540,35 @@ PyInit_timezone(PyObject *m) {
 
     And I'm lazy and hate C so nyer.
      */
-#if defined(HAVE_TZNAME) && !defined(__GLIBC__) && !defined(__CYGWIN__)
     PyObject *otz0, *otz1;
     tzset();
     PyModule_AddIntConstant(m, "timezone", timezone);
 #ifdef HAVE_ALTZONE
     PyModule_AddIntConstant(m, "altzone", altzone);
-#else
-    PyModule_AddIntConstant(m, "altzone", timezone-3600);
-#endif
-    PyModule_AddIntConstant(m, "daylight", daylight);
-    otz0 = PyUnicode_DecodeLocale(tzname[0], "surrogateescape");
-    otz1 = PyUnicode_DecodeLocale(tzname[1], "surrogateescape");
-    PyModule_AddObject(m, "tzname", Py_BuildValue("(NN)", otz0, otz1));
-#else /* !HAVE_TZNAME || __GLIBC__ || __CYGWIN__*/
+#elif defined(HAVE_STRUCT_TM_TM_ZONE)
     {
-#define YEAR ((time_t)((365 * 24 + 6) * 3600))
+        static const time_t YEAR = (365 * 24 + 6) * 3600;
         time_t t;
         struct tm p;
         long janzone, julyzone;
-        char janname[10], julyname[10];
         t = (time((time_t *)0) / YEAR) * YEAR;
         _PyTime_localtime(t, &p);
-        get_zone(janname, 9, &p);
-        janzone = -get_gmtoff(t, &p);
-        janname[9] = '\0';
+        janzone = -p.tm_gmtoff;
         t += YEAR/2;
         _PyTime_localtime(t, &p);
-        get_zone(julyname, 9, &p);
-        julyzone = -get_gmtoff(t, &p);
-        julyname[9] = '\0';
-
-        if( janzone < julyzone ) {
-            /* DST is reversed in the southern hemisphere */
-            PyModule_AddIntConstant(m, "timezone", julyzone);
-            PyModule_AddIntConstant(m, "altzone", janzone);
-            PyModule_AddIntConstant(m, "daylight",
-                                    janzone != julyzone);
-            PyModule_AddObject(m, "tzname",
-                               Py_BuildValue("(zz)",
-                                             julyname, janname));
-        } else {
-            PyModule_AddIntConstant(m, "timezone", janzone);
-            PyModule_AddIntConstant(m, "altzone", julyzone);
-            PyModule_AddIntConstant(m, "daylight",
-                                    janzone != julyzone);
-            PyModule_AddObject(m, "tzname",
-                               Py_BuildValue("(zz)",
-                                             janname, julyname));
-        }
+        julyzone = -p.tm_gmtoff;
+
+        // DST is reversed in the southern hemisphere.
+        PyModule_AddIntConstant(m, "altzone",
+            (janzone < julyzone) ? janzone : julyzone);
     }
-#ifdef __CYGWIN__
-    tzset();
-    PyModule_AddIntConstant(m, "timezone", _timezone);
-    PyModule_AddIntConstant(m, "altzone", _timezone-3600);
-    PyModule_AddIntConstant(m, "daylight", _daylight);
-    PyModule_AddObject(m, "tzname",
-                       Py_BuildValue("(zz)", _tzname[0], _tzname[1]));
-#endif /* __CYGWIN__ */
-#endif /* !HAVE_TZNAME || __GLIBC__ || __CYGWIN__*/
+#else
+    PyModule_AddIntConstant(m, "altzone", timezone-3600);
+#endif
+    PyModule_AddIntConstant(m, "daylight", daylight);
+    otz0 = PyUnicode_DecodeLocale(tzname[0], "surrogateescape");
+    otz1 = PyUnicode_DecodeLocale(tzname[1], "surrogateescape");
+    PyModule_AddObject(m, "tzname", Py_BuildValue("(NN)", otz0, otz1));
 }
 
 



More information about the Python-checkins mailing list