On 05/21/2014 07:26 AM, Daniel P. Berrange wrote:
On Wed, May 21, 2014 at 04:16:29PM +0300, Laine Stump wrote:
> Since there isn't a single libc API to get this value, this patch
> supplies one which gets the value by grabbing current UTC, then
> converting that into a struct tm with localtime_r(), then back to a
> time_t using mktime; it again does the same operation, but using
> gmtime_r() instead (for UTC). It then subtracts utc time from the
> localtime, and finally adjusts if dst is set in the localtime timeinfo
> (because for some reason mktime doesn't take that into account).
I think we ought to be able to unit test this code to make sure it is
doing what we want. ie setenv("TZ", "EDT") in the start of the test
suite to force a predictable timezone, then check the delta is
correct.
Even better than "EDT" (which is not POSIX-compliant), reuse what we
have done in other situations where we want to guarantee a known
non-zero timezone that uses just POSIX functionality:
tests/qemuxml2argvtest.c: if (setenv("TZ", "VIR00:30", 1) < 0)
{
--
Eric Blake eblake redhat com +1-919-301-3266
Libvirt virtualization library
http://libvirt.org