summaryrefslogtreecommitdiff
path: root/source3/lib/replace.c
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2003-01-03 01:41:44 +0000
committerAndrew Bartlett <abartlet@samba.org>2003-01-03 01:41:44 +0000
commita63aa62bdd3ef4545cfd68123aa3e7363dcec2e2 (patch)
treebd53ef7f47e497113529eef64b91bd9f4973b732 /source3/lib/replace.c
parent1e531eb6046908e480a36ff92f649405ad2dc15e (diff)
downloadsamba-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/lib/replace.c')
-rw-r--r--source3/lib/replace.c33
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