[tz] setting TZ and calling localtime_r

Steve Summit scs at eskimo.com
Fri Dec 15 08:37:35 UTC 2017

There's code in tzcode (and, I suspect not coincidentally,
glibc's localtime implementation as well) to not call the
internal version of tzset on calls to localtime_r, but rather
only on calls to localtime.  The justification is that Posix says
localtime_r doesn't need to update the global tzname variable.

I don't have a copy of the Posix spec handy, so I can't check:
does Posix also say that localtime_r doesn't need to check for
and make use of a possibly-changed value of TZ?  As implemented
(both in tzcode and glibc), it doesn't.  If a program calls
localtime, then calls setenv to set a new value of TZ, then
calls localtime again, it works as expected, but if it calls
localtime_r, setenv, localtime_r, it doesn't.  (The workaround,
of course, is to call localtime_r, setenv, tzset, localtime_r.)

More information about the tz mailing list