summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/common/proto-irc.c30
-rw-r--r--src/fe-gtk/banlist.c10
2 files changed, 36 insertions, 4 deletions
diff --git a/src/common/proto-irc.c b/src/common/proto-irc.c
index 7742c064..29102afc 100644
--- a/src/common/proto-irc.c
+++ b/src/common/proto-irc.c
@@ -1326,6 +1326,34 @@ 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() 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);
+
+	return time_utc - time_local;
+}
+
 /* Handle time-server tags.
  * 
  * Sets tags_data->timestamp to the correct time (in unix time). 
@@ -1370,7 +1398,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
 	{
diff --git a/src/fe-gtk/banlist.c b/src/fe-gtk/banlist.c
index 897e61d6..d80d9333 100644
--- a/src/fe-gtk/banlist.c
+++ b/src/fe-gtk/banlist.c
@@ -323,10 +323,14 @@ banlist_copyentry (GtkWidget *menuitem, GtkTreeView *view)
 	GtkTreeModel *model;
 	GtkTreeSelection *sel;
 	GtkTreeIter iter;
-	GValue mask = G_VALUE_INIT;
-	GValue from = G_VALUE_INIT;
-	GValue date = G_VALUE_INIT;
+	GValue mask;
+	GValue from;
+	GValue date;
 	char *str;
+
+	memset (&mask, 0, sizeof (mask));
+	memset (&from, 0, sizeof (from));
+	memset (&date, 0, sizeof (date));
 	
 	/* get selection (which should have been set on click)
 	 * and temporarily switch to single mode to get selected iter */