From 9a789bc9e79ffa29e1f333ebc0242cff013b815b Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Tue, 2 Jul 2013 01:41:34 +0100 Subject: Now handle_message_tag_time() doesn't use "timezone" since it is not defined in *BSD. --- src/common/proto-irc.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) (limited to 'src/common/proto-irc.c') diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c index 7742c064..b19d9afa 100644 --- a/src/common/proto-irc.c +++ b/src/common/proto-irc.c @@ -1326,6 +1326,26 @@ process_named_servermsg (session *sess, char *buf, char *rawname, char *word_eol rawname, NULL, 0, tags_data->timestamp); } +/* Returns the timezone offset. This should be the same as the variable + * "timezone" in time.h, but *BSD doesn't have it. + */ +static int +get_timezone(void) +{ + struct tm tm_utc, tm_local; + time_t t, time_utc, time_local; + + time (&t); + + gmtime_r (&t, &tm_utc); + localtime_r (&t, &tm_local); + + time_utc = mktime (&tm_utc); + time_local = mktime (&tm_local); + + return time_utc - time_local; +} + /* Handle time-server tags. * * Sets tags_data->timestamp to the correct time (in unix time). @@ -1370,7 +1390,7 @@ handle_message_tag_time (const char *time, message_tags_data *tags_data) } /* get rid of the local time (mktime() receives a local calendar time) */ - tags_data->timestamp -= timezone; + tags_data->timestamp -= get_timezone(); } else { -- cgit 1.4.1 From 4b40597c76063e0d97c6e0b6295c72caf3dc2d07 Mon Sep 17 00:00:00 2001 From: Diogo Sousa Date: Tue, 2 Jul 2013 02:22:41 +0100 Subject: Fixed get_timezone() to work on windows. --- src/common/proto-irc.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/common/proto-irc.c') diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c index b19d9afa..29102afc 100644 --- a/src/common/proto-irc.c +++ b/src/common/proto-irc.c @@ -1337,8 +1337,16 @@ get_timezone(void) time (&t); + /* gmtime() and localtime() are thread-safe on windows. + * on other systems we should use {gmtime,localtime}_r(). + */ +#if WIN32 + tm_utc = *gmtime (&t); + tm_local = *localtime (&t); +#else gmtime_r (&t, &tm_utc); localtime_r (&t, &tm_local); +#endif time_utc = mktime (&tm_utc); time_local = mktime (&tm_local); -- cgit 1.4.1