summaryrefslogtreecommitdiffabout
path: root/lib
authorMichael Krelin <hacker@klever.net>2008-06-29 16:08:01 (UTC)
committer Michael Krelin <hacker@klever.net>2008-06-29 16:11:44 (UTC)
commit12837594b705ad10fdadfd0ba1bfc2249b3b1264 (patch) (unidiff)
treee0502e678b09668ec59828237ebf5972014d0ce0 /lib
parent362678728b8232c9490e14ba14ff323d9a92d6be (diff)
downloadlibopkele-12837594b705ad10fdadfd0ba1bfc2249b3b1264.zip
libopkele-12837594b705ad10fdadfd0ba1bfc2249b3b1264.tar.gz
libopkele-12837594b705ad10fdadfd0ba1bfc2249b3b1264.tar.bz2
Fixed w3c to unix timestamp conversion for FreeBSD
Thanks to Göran Löwkrantz for pointing both to the problem and possible solution. Signed-off-by: Michael Krelin <hacker@klever.net>
Diffstat (limited to 'lib') (more/less context) (ignore whitespace changes)
-rw-r--r--lib/util.cc21
1 files changed, 18 insertions, 3 deletions
diff --git a/lib/util.cc b/lib/util.cc
index d979502..a46ba2a 100644
--- a/lib/util.cc
+++ b/lib/util.cc
@@ -122,6 +122,21 @@ namespace opkele {
122 return rv; 122 return rv;
123 } 123 }
124 124
125#ifndef HAVE_TIMEGM
126 static time_t timegm(struct tm *t) {
127 char *tz = getenv("TZ");
128 setenv("TZ","",1); tzset();
129 time_t rv = mktime(t);
130 if(tz)
131 setenv("TZ",tz,1);
132 else
133 unsetenv("TZ");
134 tzset();
135 return rv;
136 }
137 #define timegm opkele::util::timegm
138#endif /* HAVE_TIMEGM */
139
125 time_t w3c_to_time(const string& w) { 140 time_t w3c_to_time(const string& w) {
126 int fraction; 141 int fraction;
127 struct tm tm_t; 142 struct tm tm_t;
@@ -145,10 +160,10 @@ namespace opkele {
145 throw failed_conversion(OPKELE_CP_ "failed to sscanf()"); 160 throw failed_conversion(OPKELE_CP_ "failed to sscanf()");
146 tm_t.tm_mon--; 161 tm_t.tm_mon--;
147 tm_t.tm_year-=1900; 162 tm_t.tm_year-=1900;
148 time_t rv = mktime(&tm_t); 163 time_t rv = timegm(&tm_t);
149 if(rv==(time_t)-1) 164 if(rv==(time_t)-1)
150 throw failed_conversion(OPKELE_CP_ "failed to mktime()"); 165 throw failed_conversion(OPKELE_CP_ "failed to gmtime()");
151 return rv-timezone; 166 return rv;
152 } 167 }
153 168
154 /* 169 /*