aboutsummaryrefslogtreecommitdiffstats
path: root/lib/misc.c
diff options
context:
space:
mode:
authorWilmer van der Gaast <wilmer@gaast.net>2010-04-08 01:27:42 +0100
committerWilmer van der Gaast <wilmer@gaast.net>2010-04-08 01:27:42 +0100
commit2e3a8576d6ca511df347426b4319bccde1871d06 (patch)
tree58741cbd88805176701a1ff8b1fc6b635a4cd546 /lib/misc.c
parent91cec2ff02f956ec248dae6c8b8939f263ff8cfd (diff)
Added a mktime_utc() to misc.c using code that used to be in jabber_util.c.
I want to use this in the Twitter module.
Diffstat (limited to 'lib/misc.c')
-rw-r--r--lib/misc.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/misc.c b/lib/misc.c
index fe2ff17c..1d36d639 100644
--- a/lib/misc.c
+++ b/lib/misc.c
@@ -78,6 +78,41 @@ time_t get_time(int year, int month, int day, int hour, int min, int sec)
return mktime(&tm);
}
+time_t mktime_utc( struct tm *tp )
+{
+ struct tm utc;
+ time_t res, tres;
+
+ tp->tm_isdst = -1;
+ res = mktime( tp );
+ /* Problem is, mktime() just gave us the GMT timestamp for the
+ given local time... While the given time WAS NOT local. So
+ we should fix this now.
+
+ Now I could choose between messing with environment variables
+ (kludgy) or using timegm() (not portable)... Or doing the
+ following, which I actually prefer...
+
+ tzset() may also work but in other places I actually want to
+ use local time.
+
+ FFFFFFFFFFFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUU!! */
+ gmtime_r( &res, &utc );
+ utc.tm_isdst = -1;
+ if( utc.tm_hour == tp->tm_hour && utc.tm_min == tp->tm_min )
+ /* Sweet! We're in UTC right now... */
+ return res;
+
+ tres = mktime( &utc );
+ res += res - tres;
+
+ /* Yes, this is a hack. And it will go wrong around DST changes.
+ BUT this is more likely to be threadsafe than messing with
+ environment variables, and possibly more portable... */
+
+ return res;
+}
+
typedef struct htmlentity
{
char code[7];