From 9c68f9064d487573fa94d7decfb1bd68afd37070 Mon Sep 17 00:00:00 2001 From: Andrew Tridgell Date: Sat, 23 Nov 2002 06:39:04 +0000 Subject: a working timegm() function for systems that don't have it (This used to be commit 6efdd54d063043cac2fe151231ac1999ade25704) --- source3/lib/replace.c | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) (limited to 'source3') diff --git a/source3/lib/replace.c b/source3/lib/replace.c index dfc88e7028..913cd29b23 100644 --- a/source3/lib/replace.c +++ b/source3/lib/replace.c @@ -432,26 +432,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 -- cgit