base: Revert 9277177eccff and use getenv/setenv for UTC time

This patch reverts changeset 9277177eccff which does not do what it
was intended to do. In essence, we go back to implementing mkutctime
much like the non-standard timegm extension.
This commit is contained in:
Andreas Hansson 2014-11-12 09:05:20 -05:00
parent 02b4605da0
commit cc336ecb5e
2 changed files with 28 additions and 4 deletions

View file

@ -150,7 +150,32 @@ sleep(const Time &time)
time_t
mkutctime(struct tm *time)
{
time_t local = mktime(time);
return mktime(gmtime(&local));
// get the current timezone
char *tz = getenv("TZ");
// copy the string as the pointer gets invalidated when updating
// the environment
if (tz) {
tz = strdup(tz);
if (!tz) {
fatal("Failed to reserve memory for UTC time conversion\n");
}
}
// change to UTC and get the time
setenv("TZ", "", 1);
tzset();
time_t ret = mktime(time);
// restore the timezone again
if (tz) {
setenv("TZ", tz, 1);
free(tz);
} else {
unsetenv("TZ");
}
tzset();
return ret;
}

View file

@ -53,8 +53,7 @@ DumbTOD::DumbTOD(const Params *p)
: BasicPioDevice(p, 0x08)
{
struct tm tm = p->time;
time_t local = mktime(&tm);
todTime = mktime(gmtime(&local));
todTime = mkutctime(&tm);
DPRINTFN("Real-time clock set to %s\n", asctime(&tm));
DPRINTFN("Real-time clock set to %d\n", todTime);