]> git.eshelyaron.com Git - emacs.git/commitdiff
Improve port to NetBSD tzalloc
authorPaul Eggert <eggert@cs.ucla.edu>
Thu, 15 Mar 2018 16:35:33 +0000 (09:35 -0700)
committerAndrew G Cohen <cohen@andy.bu.edu>
Tue, 11 Dec 2018 06:17:31 +0000 (14:17 +0800)
Problem reported by Valery Ushakov (Bug#30738#13).
* src/editfns.c (tzlookup) [__NetBSD_Version__ < 700000000]:
If tzalloc fails for any reason other than memory exhaustion,
assume it’s because NetBSD 6 does not support tzalloc on
POSIX-format TZ strings, and fall back on tzdb if possible.

src/editfns.c

index 6ecc83fc302dbf6c99901609850646970fbfdf24..d26319441b33c89db98f26c5a2e76210e100c9bb 100644 (file)
@@ -204,6 +204,18 @@ tzlookup (Lisp_Object zone, bool settz)
        invalid_time_zone_specification (zone);
 
       new_tz = tzalloc (zone_string);
+
+#if defined __NetBSD_Version__ && __NetBSD_Version__ < 700000000
+      /* NetBSD 6 tzalloc mishandles POSIX TZ strings (Bug#30738).
+        If possible, fall back on tzdb.  */
+      if (!new_tz && errno != ENOMEM && plain_integer
+         && XINT (zone) % (60 * 60) == 0)
+       {
+         sprintf (tzbuf, "Etc/GMT%+"pI"d", - (XINT (zone) / (60 * 60)));
+         new_tz = tzalloc (zone_string);
+       }
+#endif
+
       if (!new_tz)
        {
          if (errno == ENOMEM)