From 20219ef1a30ce5fb9dde0dcb8be0abe3c43b8e97 Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Sat, 1 Nov 2008 15:01:08 +0100 Subject: [PATCH] Fix timer hook when daylight saving time is enabled (problem with "day changed" message) --- src/core/wee-hook.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/core/wee-hook.c b/src/core/wee-hook.c index b1706de54..f34d17433 100644 --- a/src/core/wee-hook.c +++ b/src/core/wee-hook.c @@ -520,7 +520,9 @@ hook_timer (struct t_weechat_plugin *plugin, long interval, int align_second, { struct t_hook *new_hook; struct t_hook_timer *new_hook_timer; - struct timezone tz; + time_t time_now; + struct tm *local_time, *gm_time; + int local_hour, gm_hour; if (interval <= 0) return NULL; @@ -541,9 +543,13 @@ hook_timer (struct t_weechat_plugin *plugin, long interval, int align_second, new_hook_timer->callback = callback; new_hook_timer->interval = interval; new_hook_timer->remaining_calls = max_calls; - - tz.tz_minuteswest = 0; - gettimeofday (&new_hook_timer->last_exec, &tz); + + gettimeofday (&new_hook_timer->last_exec, NULL); + time_now = time (NULL); + local_time = localtime(&time_now); + local_hour = local_time->tm_hour; + gm_time = gmtime(&time_now); + gm_hour = gm_time->tm_hour; if ((interval >= 1000) && (align_second > 0)) { @@ -553,7 +559,7 @@ hook_timer (struct t_weechat_plugin *plugin, long interval, int align_second, new_hook_timer->last_exec.tv_usec = 1000; new_hook_timer->last_exec.tv_sec = new_hook_timer->last_exec.tv_sec - - ((new_hook_timer->last_exec.tv_sec - (tz.tz_minuteswest * 60)) % + ((new_hook_timer->last_exec.tv_sec + ((local_hour - gm_hour) * 3600)) % align_second); }