summary refs log tree commit diff stats
path: root/src/common/proto-irc.c
diff options
context:
space:
mode:
authorDiogo Sousa <diogogsousa@gmail.com>2013-07-02 01:41:34 +0100
committerDiogo Sousa <diogogsousa@gmail.com>2013-07-02 01:54:18 +0100
commit9a789bc9e79ffa29e1f333ebc0242cff013b815b (patch)
treeec08541e83226d30c6fef7b21ea70dc66cf96542 /src/common/proto-irc.c
parent4886cc8258783047ab035ea35ec5b08997948567 (diff)
Now handle_message_tag_time() doesn't use "timezone" since it is not defined
in *BSD.
Diffstat (limited to 'src/common/proto-irc.c')
-rw-r--r--src/common/proto-irc.c22
1 files changed, 21 insertions, 1 deletions
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
 	{