diff options
author | Andrew Bartlett <abartlet@samba.org> | 2003-01-03 01:41:44 +0000 |
---|---|---|
committer | Andrew Bartlett <abartlet@samba.org> | 2003-01-03 01:41:44 +0000 |
commit | a63aa62bdd3ef4545cfd68123aa3e7363dcec2e2 (patch) | |
tree | bd53ef7f47e497113529eef64b91bd9f4973b732 /source3 | |
parent | 1e531eb6046908e480a36ff92f649405ad2dc15e (diff) | |
download | samba-a63aa62bdd3ef4545cfd68123aa3e7363dcec2e2.tar.gz samba-a63aa62bdd3ef4545cfd68123aa3e7363dcec2e2.tar.bz2 samba-a63aa62bdd3ef4545cfd68123aa3e7363dcec2e2.zip |
Merge from HEAD - tridge's new timegm() that actually works on solaris.
Andrew Bartlett
(This used to be commit 353c6b24234444c5430de183c3a4b1318bfce02c)
Diffstat (limited to 'source3')
-rw-r--r-- | source3/lib/replace.c | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/source3/lib/replace.c b/source3/lib/replace.c index a826de3560..cd48b8d160 100644 --- a/source3/lib/replace.c +++ b/source3/lib/replace.c @@ -427,26 +427,23 @@ char *rep_inet_ntoa(struct in_addr ip) #ifndef HAVE_TIMEGM /* - see the timegm man page on linux + yes, I know this looks insane, but its really needed. The function in the + Linux timegm() manpage does not work on solaris. */ time_t timegm(struct tm *tm) { - time_t ret; - char *tz; - char *tzvar; - - tz = getenv("TZ"); - putenv("TZ="); - tzset(); - ret = mktime(tm); - if (tz) { - asprintf(&tzvar, "TZ=%s", tz); - putenv(tzvar); - safe_free(tzvar); - } else { - putenv("TZ"); - } - tzset(); - return ret; + struct tm tm2, tm3; + time_t t; + + tm2 = *tm; + + t = mktime(&tm2); + tm3 = *localtime(&t); + tm2 = *tm; + tm2.tm_isdst = tm3.tm_isdst; + t = mktime(&tm2); + t -= TimeDiff(t); + + return t; } #endif |