summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKen Murchison <murch@andrew.cmu.edu>2014-06-26 14:22:14 -0400
committerKen Murchison <murch@andrew.cmu.edu>2014-06-26 14:36:51 -0400
commit958e88837a9ae7633ef03b5685bbd30a2b66ca8d (patch)
treefea6fb2a85a2685e5c0e077ca4d17c1c68693702 /src
parent98c1406216d2a1a77257597ba624f38735229c75 (diff)
downloadlibical-git-958e88837a9ae7633ef03b5685bbd30a2b66ca8d.tar.gz
fix for icalcomponent_foreach_recurrence() and large durations between recurrences (e.g. FREQ=YEARLY)
Diffstat (limited to 'src')
-rw-r--r--src/libical/icalcomponent.c15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/libical/icalcomponent.c b/src/libical/icalcomponent.c
index 757def20..5b0aef07 100644
--- a/src/libical/icalcomponent.c
+++ b/src/libical/icalcomponent.c
@@ -1005,7 +1005,6 @@ void icalcomponent_foreach_recurrence(icalcomponent* comp,
time_t limit_start, limit_end;
time_t dtduration;
icalproperty *rrule, *rdate;
- struct icaldurationtype dur;
pvl_elem property_iterator; /* for saving the iterator */
if (comp == NULL || callback == NULL)
@@ -1073,9 +1072,10 @@ void icalcomponent_foreach_recurrence(icalcomponent* comp,
if (icaltime_compare(rrule_time, end) > 0)
break;
- dur = icaltime_subtract(rrule_time, dtstart);
-
- recurspan.start = basespan.start + icaldurationtype_as_int(dur);
+ recurspan.start =
+ icaltime_as_timet_with_zone(rrule_time,
+ rrule_time.zone ? rrule_time.zone :
+ icaltimezone_get_utc_timezone());
recurspan.end = recurspan.start + dtduration;
/** save the iterator ICK! **/
@@ -1108,9 +1108,10 @@ void icalcomponent_foreach_recurrence(icalcomponent* comp,
if (icaltime_is_null_time(rdate_period.time))
continue;
- dur = icaltime_subtract(rdate_period.time, dtstart);
-
- recurspan.start = basespan.start + icaldurationtype_as_int(dur);
+ recurspan.start =
+ icaltime_as_timet_with_zone(rdate_period.time,
+ rdate_period.time.zone ? rdate_period.time.zone :
+ icaltimezone_get_utc_timezone());
recurspan.end = recurspan.start + dtduration;
/** save the iterator ICK! **/