Index: src/libical/icaltz-util.c =================================================================== --- src/libical/icaltz-util.c (revision 948) +++ src/libical/icaltz-util.c (working copy) @@ -421,7 +421,12 @@ icalprop = icalproperty_new_tzname (types [zidx].zname); icalcomponent_add_property (std_comp, icalprop); - trans = transitions [stdidx] + types [zidx].gmtoff; + if (dstidx != -1) + zp_idx = trans_idx [stdidx-1]; + else + zp_idx = zidx; + /* DTSTART localtime uses TZOFFSETFROM UTC offset */ + trans = transitions [stdidx] + types [zp_idx].gmtoff; icaltime = icaltime_from_timet (trans, 0); dtstart = icaltime; dtstart.year = 1970; @@ -431,7 +436,6 @@ /* If DST changes are present use RRULE */ if (dstidx != -1) { - zp_idx = trans_idx [stdidx-1]; icalrecurrencetype_clear (&ical_recur); ical_recur.freq = ICAL_YEARLY_RECURRENCE; ical_recur.by_month [0] = icaltime.month; @@ -442,13 +446,9 @@ icalcomponent_add_property (std_comp, icalprop); adjust_dtstart_day_to_rrule (std_comp, ical_recur); - - icalprop = icalproperty_new_tzoffsetfrom (types [zp_idx].gmtoff); - icalcomponent_add_property (std_comp, icalprop); - } else { - icalprop = icalproperty_new_tzoffsetfrom (types [zidx].gmtoff); - icalcomponent_add_property (std_comp, icalprop); } + icalprop = icalproperty_new_tzoffsetfrom (types [zp_idx].gmtoff); + icalcomponent_add_property (std_comp, icalprop); icalprop = icalproperty_new_tzoffsetto (types [zidx].gmtoff); icalcomponent_add_property (std_comp, icalprop); @@ -459,12 +459,13 @@ if (dstidx != -1) { zidx = trans_idx [dstidx]; - zp_idx = trans_idx [dstidx-1]; + zp_idx = trans_idx [dstidx-1]; dst_comp = icalcomponent_new (ICAL_XDAYLIGHT_COMPONENT); icalprop = icalproperty_new_tzname (types [zidx].zname); icalcomponent_add_property (dst_comp, icalprop); - trans = transitions [dstidx] + types [zidx].gmtoff; + /* DTSTART localtime uses TZOFFSETFROM UTC offset */ + trans = transitions [dstidx] + types [zp_idx].gmtoff; icaltime = icaltime_from_timet (trans, 0); dtstart = icaltime; dtstart.year = 1970; Index: src/libical/icalcomponent.c =================================================================== --- src/libical/icalcomponent.c (revision 948) +++ src/libical/icalcomponent.c (working copy) @@ -90,6 +90,8 @@ icalcomponent *vtimezone2); static int icalcomponent_compare_timezone_fn (const void *elem1, const void *elem2); +static struct icaltimetype +icalcomponent_get_datetime(icalcomponent *comp, icalproperty *prop); void icalcomponent_add_children(icalcomponent *impl, va_list args) @@ -862,7 +864,7 @@ exdate != NULL; exdate = icalcomponent_get_next_property(comp,ICAL_EXDATE_PROPERTY)) { - struct icaltimetype exdatetime = icalproperty_get_exdate(exdate); + struct icaltimetype exdatetime = icalcomponent_get_datetime(comp, exdate); if (icaltime_compare(*recurtime, exdatetime) == 0) { /** MATCHED **/ @@ -2030,51 +2032,51 @@ return icalproperty_get_status(prop); } -icalcomponent* icalcomponent_new_vcalendar() +icalcomponent* icalcomponent_new_vcalendar(void) { return icalcomponent_new(ICAL_VCALENDAR_COMPONENT); } -icalcomponent* icalcomponent_new_vevent() +icalcomponent* icalcomponent_new_vevent(void) { return icalcomponent_new(ICAL_VEVENT_COMPONENT); } -icalcomponent* icalcomponent_new_vtodo() +icalcomponent* icalcomponent_new_vtodo(void) { return icalcomponent_new(ICAL_VTODO_COMPONENT); } -icalcomponent* icalcomponent_new_vjournal() +icalcomponent* icalcomponent_new_vjournal(void) { return icalcomponent_new(ICAL_VJOURNAL_COMPONENT); } -icalcomponent* icalcomponent_new_valarm() +icalcomponent* icalcomponent_new_valarm(void) { return icalcomponent_new(ICAL_VALARM_COMPONENT); } -icalcomponent* icalcomponent_new_vfreebusy() +icalcomponent* icalcomponent_new_vfreebusy(void) { return icalcomponent_new(ICAL_VFREEBUSY_COMPONENT); } -icalcomponent* icalcomponent_new_vtimezone() +icalcomponent* icalcomponent_new_vtimezone(void) { return icalcomponent_new(ICAL_VTIMEZONE_COMPONENT); } -icalcomponent* icalcomponent_new_xstandard() +icalcomponent* icalcomponent_new_xstandard(void) { return icalcomponent_new(ICAL_XSTANDARD_COMPONENT); } -icalcomponent* icalcomponent_new_xdaylight() +icalcomponent* icalcomponent_new_xdaylight(void) { return icalcomponent_new(ICAL_XDAYLIGHT_COMPONENT); } -icalcomponent* icalcomponent_new_vagenda() +icalcomponent* icalcomponent_new_vagenda(void) { return icalcomponent_new(ICAL_VAGENDA_COMPONENT); } -icalcomponent* icalcomponent_new_vquery() +icalcomponent* icalcomponent_new_vquery(void) { return icalcomponent_new(ICAL_VQUERY_COMPONENT); } -icalcomponent* icalcomponent_new_vreply() +icalcomponent* icalcomponent_new_vreply(void) { return icalcomponent_new(ICAL_VREPLY_COMPONENT); } Index: src/libical/icalcomponent.h =================================================================== --- src/libical/icalcomponent.h (revision 948) +++ src/libical/icalcomponent.h (working copy) @@ -270,16 +270,16 @@ /*************** Type Specific routines ***************/ -icalcomponent* icalcomponent_new_vcalendar(); -icalcomponent* icalcomponent_new_vevent(); -icalcomponent* icalcomponent_new_vtodo(); -icalcomponent* icalcomponent_new_vjournal(); -icalcomponent* icalcomponent_new_valarm(); -icalcomponent* icalcomponent_new_vfreebusy(); -icalcomponent* icalcomponent_new_vtimezone(); -icalcomponent* icalcomponent_new_xstandard(); -icalcomponent* icalcomponent_new_xdaylight(); -icalcomponent* icalcomponent_new_vagenda(); -icalcomponent* icalcomponent_new_vquery(); +icalcomponent* icalcomponent_new_vcalendar(void); +icalcomponent* icalcomponent_new_vevent(void); +icalcomponent* icalcomponent_new_vtodo(void); +icalcomponent* icalcomponent_new_vjournal(void); +icalcomponent* icalcomponent_new_valarm(void); +icalcomponent* icalcomponent_new_vfreebusy(void); +icalcomponent* icalcomponent_new_vtimezone(void); +icalcomponent* icalcomponent_new_xstandard(void); +icalcomponent* icalcomponent_new_xdaylight(void); +icalcomponent* icalcomponent_new_vagenda(void); +icalcomponent* icalcomponent_new_vquery(void); #endif /* !ICALCOMPONENT_H */