From f06c1b142f8d952ed63ee35727586f9de124b83f Mon Sep 17 00:00:00 2001 From: Frederic Culot Date: Sat, 13 Dec 2008 21:41:25 +0000 Subject: daylight saving time related problems fixed (thanks youshe and Jan for reporting them) --- ChangeLog | 6 ++++++ src/recur.c | 15 ++++++--------- src/utils.c | 3 ++- 3 files changed, 14 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 30c467a..00e58f3 100755 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-12-13 Frederic Culot + + * src/recur.c (recur_item_inday) + * src/utils.c (date_sec_change): daylight saving time unwanted + offset fixed (thanks youshe and Jan for reporting the problem) + 2008-12-12 Frederic Culot * src/utils.c (mycpy): suppressed and replaced by strdup diff --git a/src/recur.c b/src/recur.c index 912f5d0..eb98431 100755 --- a/src/recur.c +++ b/src/recur.c @@ -1,4 +1,4 @@ -/* $calcurse: recur.c,v 1.42 2008/12/12 20:44:50 culot Exp $ */ +/* $calcurse: recur.c,v 1.43 2008/12/13 21:41:25 culot Exp $ */ /* * Calcurse - text-based organizer @@ -425,6 +425,7 @@ recur_day_is_exc (long day, struct days_s *item_exc) * Check if the recurrent item belongs to the selected day, * and if yes, return the real start time. * This function was improved thanks to Tony's patch. + * Thanks also to youshe for reporting daylight saving time related problems. */ unsigned recur_item_inday (long item_start, struct days_s *item_exc, int rpt_type, @@ -440,7 +441,7 @@ recur_item_inday (long item_start, struct days_s *item_exc, int rpt_type, day_end = day_start + DAYINSEC; t = day_start; lt_day = *localtime (&t); - + for (exc = item_exc; exc != 0; exc = exc->next) if (exc->st < day_end && exc->st >= day_start) return (0); @@ -453,16 +454,12 @@ recur_item_inday (long item_start, struct days_s *item_exc, int rpt_type, t = item_start; lt_item = *localtime (&t); - - /* For proper calculation, both items must start at same time. */ - day_start += (lt_item.tm_hour * HOURINSEC + lt_item.tm_min * MININSEC + - lt_item.tm_sec); - + switch (rpt_type) { case RECUR_DAILY: - diff = (long) difftime ((time_t) day_start, (time_t) item_start); - if (diff % (rpt_freq * DAYINSEC) != 0) + diff = lt_day.tm_yday - lt_item.tm_yday; + if (diff % rpt_freq != 0) return (0); lt_item.tm_mday = lt_day.tm_mday; lt_item.tm_mon = lt_day.tm_mon; diff --git a/src/utils.c b/src/utils.c index f421f10..90c2e60 100755 --- a/src/utils.c +++ b/src/utils.c @@ -1,4 +1,4 @@ -/* $calcurse: utils.c,v 1.57 2008/12/12 20:44:50 culot Exp $ */ +/* $calcurse: utils.c,v 1.58 2008/12/13 21:41:25 culot Exp $ */ /* * Calcurse - text-based organizer @@ -561,6 +561,7 @@ date_sec_change (long date, int delta_month, int delta_day) lt = localtime (&t); lt->tm_mon += delta_month; lt->tm_mday += delta_day; + lt->tm_isdst = -1; t = mktime (lt); if (t == -1) { -- cgit v1.2.3-54-g00ecf