1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-13 03:32:24 +00:00

Backport the ksh2020 fix for timezone name determination

This fix for `printf '%T' now` on FreeBSD was written by
@krader1961. This is from https://github.com/att/ast/pull/591:

On FreeBSD calling tzset() does not guarantee the tzname array will
be correctly populated. On most systems that works but on FreeBSD you
have to call localtime() or a related function (e.g., ctime()).

This change also eliminates a potential, very small, memory leak due to
the strdup()'ed tznames not being freed.

src/lib/libast/tm/tminit.c:
 - Fix timezone name determination on FreeBSD and a memory leak.
This commit is contained in:
Johnothan King 2020-06-13 14:16:08 -07:00
parent 289f56cd4c
commit d7c9470704
2 changed files with 6 additions and 8 deletions

4
NEWS
View file

@ -4,6 +4,10 @@ For full details, see the git log at:
Any uppercase BUG_* names are modernish shell bug IDs.
2020-06-13:
- Fixed a timezone name determination bug on FreeBSD that caused the
output from `LC_ALL=C printf '%T' now` to print the wrong time zone name.
2020-06-11:
- Fixed a bug that caused running 'builtin -d' on a special builtin to

View file

@ -247,10 +247,6 @@ tmlocal(void)
else if (e)
environ[0] = e;
}
#endif
#if _dat_tzname
local.standard = strdup(tzname[0]);
local.daylight = strdup(tzname[1]);
#endif
tmlocale();
@ -296,10 +292,8 @@ tmlocal(void)
* POSIX
*/
if (!local.standard)
local.standard = strdup(tzname[0]);
if (!local.daylight)
local.daylight = strdup(tzname[1]);
local.standard = strdup(tzname[0]);
local.daylight = strdup(tzname[1]);
}
else
#endif