From: Art Cancro Date: Fri, 8 Feb 2008 04:04:55 +0000 (+0000) Subject: httpdate_to_datestamp() no longer needs to temporarily X-Git-Tag: v7.86~2512 X-Git-Url: https://code.citadel.org/?a=commitdiff_plain;h=8a4e6a208ce7931d34fded55fc1c749a0d9306e1;p=citadel.git httpdate_to_datestamp() no longer needs to temporarily set the TZ environment variable to UTC, which is good because some systems will fail to set it back afterwards. Instead we grab the offset from the global 'timezone' variable and add it to tm_sec. mktime() will then normalize the struct before converting to time_t. This fixes a bug on some systems where the time zone would appear to spontaneously switch to UTC. --- diff --git a/webcit/fmt_date.c b/webcit/fmt_date.c index af694a8c6..6fd92f749 100644 --- a/webcit/fmt_date.c +++ b/webcit/fmt_date.c @@ -147,7 +147,6 @@ time_t httpdate_to_timestamp(char *buf) time_t t = 0; struct tm tt; char *c; - char tz[256]; /** Skip day of week, to number */ for (c = buf; *c != ' '; c++) @@ -213,18 +212,15 @@ time_t httpdate_to_timestamp(char *buf) tt.tm_sec = atoi(c); for (; *c && *c != ' '; c++); - /* Got everything; let's go */ - /* First, change to UTC */ - if (getenv("TZ")) - snprintf(tz, 256, "TZ=%s", getenv("TZ")); - else - strcpy(tz, "TZ="); - putenv("TZ=UTC"); + /* Got everything; let's go. The global 'timezone' variable contains the + * local timezone's offset from UTC, in seconds, so we add that to tm_sec. + * This produces an illegal value for tm_sec, but mktime() will normalize + * it for us. This eliminates the need to temporarily switch the environment + * variable TZ to UTC, which is good because it fails to switch back on + * some systems. + */ tzset(); + tt.tm_sec += timezone; t = mktime(&tt); - putenv(tz); - tzset(); return t; } - -