diff options
Diffstat (limited to 'libical')
-rw-r--r-- | libical/ChangeLog | 11 | ||||
-rw-r--r-- | libical/src/libical/icalcomponent.c | 8 | ||||
-rw-r--r-- | libical/src/libical/icaltimezone.c | 30 |
3 files changed, 43 insertions, 6 deletions
diff --git a/libical/ChangeLog b/libical/ChangeLog index 2c20f8c270..bd481341ce 100644 --- a/libical/ChangeLog +++ b/libical/ChangeLog @@ -1,3 +1,14 @@ +2001-09-06 Damon Chaplin <damon@ximian.com> + + * src/libical/icalcomponent.c (icalcomponent_merge_vtimezone): pass + the VTIMEZONE component to icalcomponent_compare_vtimezones(), not + the icaltimezone*. Strangely we weren't getting a compiler error. + Fixes bug #5275, hopefully. + + * src/libical/icaltimezone.c (icaltimezone_dump_changes): updated so + it still outputs the same format, even though the '1 Jan 0001' + component isn't included any more. + 2001-08-31 Damon Chaplin <damon@ximian.com> * zoneinfo/*: updated all of the VTIMEZONE files to try to be more diff --git a/libical/src/libical/icalcomponent.c b/libical/src/libical/icalcomponent.c index 64b2e0d97f..660e739984 100644 --- a/libical/src/libical/icalcomponent.c +++ b/libical/src/libical/icalcomponent.c @@ -1578,7 +1578,8 @@ static void icalcomponent_merge_vtimezone (icalcomponent *comp, icalproperty *tzid_prop; const char *tzid; char *tzid_copy; - icaltimezone *existing_vtimezone; + icaltimezone *existing_zone; + icalcomponent *existing_vtimezone; /* Get the TZID of the VTIMEZONE. */ tzid_prop = icalcomponent_get_first_property (vtimezone, ICAL_TZID_PROPERTY); @@ -1590,11 +1591,11 @@ static void icalcomponent_merge_vtimezone (icalcomponent *comp, return; /* See if there is already a VTIMEZONE in comp with the same TZID. */ - existing_vtimezone = icalcomponent_get_timezone (comp, tzid); + existing_zone = icalcomponent_get_timezone (comp, tzid); /* If there is no existing VTIMEZONE with the same TZID, we can just move the VTIMEZONE to comp and return. */ - if (!existing_vtimezone) { + if (!existing_zone) { icalcomponent_remove_component (icalcomponent_get_parent (vtimezone), vtimezone); icalcomponent_add_component (comp, vtimezone); @@ -1616,6 +1617,7 @@ static void icalcomponent_merge_vtimezone (icalcomponent *comp, return; } + existing_vtimezone = icaltimezone_get_component (existing_zone); if (!icalcomponent_compare_vtimezones (existing_vtimezone, vtimezone)) { /* FIXME: Handle possible NEWFAILED error. */ diff --git a/libical/src/libical/icaltimezone.c b/libical/src/libical/icaltimezone.c index fcb12c378b..17a3b437d7 100644 --- a/libical/src/libical/icaltimezone.c +++ b/libical/src/libical/icaltimezone.c @@ -1541,6 +1541,32 @@ icaltimezone_dump_changes (icaltimezone *zone, printf ("Num changes: %i\n", zone->changes->num_elements); #endif + /* This shouldn't happen. */ + if (zone->changes->num_elements == 0) { + fprintf (fp, "%s\tNO CHANGES", zone->location); + return; + } + + zone_change = icalarray_element_at (zone->changes, 0); + + /* If there is just one change, and the TZOFFSETFROM and TZOFFSETTO are + the same, meaning the zone just uses the same offset forever, we output + the special '1 Jan 0001' date instead and return. */ + if (zone->changes->num_elements == 1 + && zone_change->prev_utc_offset == zone_change->utc_offset + && (zone_change->year == 1600 || zone_change->year == 1601)) { + fprintf (fp, "%s\t 1 Jan 0001\t 0:00:00", zone->location); + format_utc_offset (zone_change->utc_offset, buffer); + fprintf (fp, "\t%s\n", buffer); + return; + } + + /* Output the special 1 Jan 0001 change here, using the TZOFFSET_FROM + field of the first change. */ + fprintf (fp, "%s\t 1 Jan 0001\t 0:00:00", zone->location); + format_utc_offset (zone_change->prev_utc_offset, buffer); + fprintf (fp, "\t%s\n", buffer); + change_num = 0; for (change_num = 0; change_num < zone->changes->num_elements; change_num++) { zone_change = icalarray_element_at (zone->changes, change_num); @@ -1556,9 +1582,7 @@ icaltimezone_dump_changes (icaltimezone *zone, /* Wall Clock Time offset from UTC. */ format_utc_offset (zone_change->utc_offset, buffer); - fprintf (fp, "\t%s", buffer); - - fprintf (fp, "\n"); + fprintf (fp, "\t%s\n", buffer); } } |