From bda66bd2aeaca2ec491cf8db1aa4e5bcc1e5e56a Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Mon, 19 Mar 2018 16:49:09 -0700 Subject: [PATCH] Improve port to NetBSD tzalloc Problem reported by Valery Ushakov (Bug#30738#22). * src/editfns.c (HAVE_TZALLOC_BUG): New macro. (tzlookup): Use it. Compile on all platforms, not just on NetBSD. --- src/editfns.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/editfns.c b/src/editfns.c index cb7353a48c6..7e35fe87972 100644 --- a/src/editfns.c +++ b/src/editfns.c @@ -48,6 +48,16 @@ along with GNU Emacs. If not, see . */ #include #include +#ifdef HAVE_TIMEZONE_T +# include +# if defined __NetBSD_Version__ && __NetBSD_Version__ < 700000000 +# define HAVE_TZALLOC_BUG true +# endif +#endif +#ifndef HAVE_TZALLOC_BUG +# define HAVE_TZALLOC_BUG false +#endif + #include #include #include @@ -205,16 +215,14 @@ tzlookup (Lisp_Object zone, bool settz) 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 + if (HAVE_TZALLOC_BUG && !new_tz && errno != ENOMEM && plain_integer && XINT (zone) % (60 * 60) == 0) { + /* tzalloc mishandles POSIX strings; fall back on tzdb if + possible (Bug#30738). */ sprintf (tzbuf, "Etc/GMT%+"pI"d", - (XINT (zone) / (60 * 60))); new_tz = tzalloc (zone_string); } -#endif if (!new_tz) { -- 2.39.2