aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libical/ChangeLog24
-rwxr-xr-xlibical/scripts/mkderivedproperties.pl22
-rw-r--r--libical/src/libical/icalcomponent.c37
-rw-r--r--libical/src/libical/icalrecur.c6
-rw-r--r--libical/src/libical/icaltimezone.c3
-rw-r--r--libical/src/libical/icalvalue.c1
6 files changed, 71 insertions, 22 deletions
diff --git a/libical/ChangeLog b/libical/ChangeLog
index e5bce01c3e..bb4a1e06e0 100644
--- a/libical/ChangeLog
+++ b/libical/ChangeLog
@@ -1,3 +1,27 @@
+2001-07-30 Damon Chaplin <damon@ximian.com>
+
+ * src/libical/icalcomponent.c (icalcomponent_merge_vtimezone): copy
+ the TZID just in case the property we got it from gets modified.
+ (icalcomponent_rename_tzids_callback): break out of the loop if we
+ have renamed the TZID parameter. Otherwise our tzid variable would be
+ invalid.
+
+ * scripts/mkderivedproperties.pl (fudge_data): changed this so we can
+ set EXDATEs that are DATE values, by checking the is_date field.
+ I'm not entirely sure this is the way it should be done.
+ If it is, I'll also do this for other things like DTSTART/DTEND.
+
+ * src/libical/icalrecur.c (icalrecurrencetype_as_string): handle
+ UNTIL as a DATE value as well as a DATE-TIME.
+
+ * src/libical/icalcomponent.c (icalcomponent_compare_vtimezones):
+ fixed stupid error, getting TZID property from wrong VTIMEZONE.
+ This would only have affected iTIP stuff, with VTIMEZONEs that don't
+ use the '/' prefix (i.e. from Outlook). It probably just meant we
+ kept multiple copies of the same VTIMEZONE.
+
+ * src/libical/icaltimezone.c: removed some debugging messages.
+
2001-07-26 JP Rosevear <jpr@ximian.com>
* src/libical/icalcomponent.c (icalcomponent_begin_component):
diff --git a/libical/scripts/mkderivedproperties.pl b/libical/scripts/mkderivedproperties.pl
index 4e011e112e..965817eb30 100755
--- a/libical/scripts/mkderivedproperties.pl
+++ b/libical/scripts/mkderivedproperties.pl
@@ -179,6 +179,24 @@ icalproperty* icalproperty_vanew_${lc}($type v, ...){
va_end(args);
return (icalproperty*)impl;
}
+EOM
+
+ # Allow EXDATEs to take DATE values easily.
+ if ($lc eq "exdate") {
+ print<<EOM;
+void icalproperty_set_${lc}(icalproperty* prop, $type v){
+ icalvalue *value;
+ $set_pointer_check
+ icalerror_check_arg_rv( (prop!=0),"prop");
+ if (v.is_date)
+ value = icalvalue_new_date(v);
+ else
+ value = icalvalue_new_datetime(v);
+ icalproperty_set_value(prop,value);
+}
+EOM
+ } else {
+ print<<EOM;
void icalproperty_set_${lc}(icalproperty* prop, $type v){
icalvalue *value;
$set_pointer_check
@@ -186,6 +204,10 @@ void icalproperty_set_${lc}(icalproperty* prop, $type v){
value = icalvalue_new_${lcvalue}(v);
icalproperty_set_value(prop,value);
}
+EOM
+ }
+
+ print<<EOM;
$type icalproperty_get_${lc}(icalproperty* prop){
icalvalue *value;
icalerror_check_arg( (prop!=0),"prop");
diff --git a/libical/src/libical/icalcomponent.c b/libical/src/libical/icalcomponent.c
index a4f0ad7c7f..64b2e0d97f 100644
--- a/libical/src/libical/icalcomponent.c
+++ b/libical/src/libical/icalcomponent.c
@@ -563,16 +563,12 @@ icalcomponent_add_component (icalcomponent* parent, icalcomponent* child)
icalerror_assert( (cimpl->parent ==0),"The child component has already been added to a parent component. Remove the component with icalcomponent_remove_component before calling icalcomponent_add_component");
- fprintf (stderr, "In icalcomponent_add_component\n");
-
cimpl->parent = parent;
pvl_push(impl->components,child);
/* If the new component is a VTIMEZONE, add it to our array. */
if (cimpl->kind == ICAL_VTIMEZONE_COMPONENT) {
- fprintf (stderr, " it is a VTIMEZONE component.\n");
-
/* FIXME: Currently we are also creating this array when loading in
a builtin VTIMEZONE, when we don't need it. */
if (!impl->timezones)
@@ -582,9 +578,6 @@ icalcomponent_add_component (icalcomponent* parent, icalcomponent* child)
/* Flag that we need to sort it before doing any binary searches. */
impl->timezones_sorted = 0;
-
- fprintf (stderr, " num timezones in array: %i\n",
- impl->timezones->num_elements);
}
}
@@ -1584,6 +1577,7 @@ static void icalcomponent_merge_vtimezone (icalcomponent *comp,
{
icalproperty *tzid_prop;
const char *tzid;
+ char *tzid_copy;
icaltimezone *existing_vtimezone;
/* Get the TZID of the VTIMEZONE. */
@@ -1614,14 +1608,22 @@ static void icalcomponent_merge_vtimezone (icalcomponent *comp,
/* Now we have two VTIMEZONEs with the same TZID (which isn't a globally
unique one), so we compare the VTIMEZONE components to see if they are
- the same. If they are, we don't need to do anything. */
- if (icalcomponent_compare_vtimezones (existing_vtimezone, vtimezone))
+ the same. If they are, we don't need to do anything. We make a copy of
+ the tzid, since the parameter may get modified in these calls. */
+ tzid_copy = strdup (tzid);
+ if (!tzid_copy) {
+ icalerror_set_errno(ICAL_NEWFAILED_ERROR);
return;
- /* FIXME: Handle possible NEWFAILED error. */
+ }
- /* Now we have two different VTIMEZONEs with the same TZID. */
- icalcomponent_handle_conflicting_vtimezones (comp, vtimezone, tzid_prop,
- tzid, tzids_to_rename);
+ if (!icalcomponent_compare_vtimezones (existing_vtimezone, vtimezone)) {
+ /* FIXME: Handle possible NEWFAILED error. */
+
+ /* Now we have two different VTIMEZONEs with the same TZID. */
+ icalcomponent_handle_conflicting_vtimezones (comp, vtimezone, tzid_prop,
+ tzid_copy, tzids_to_rename);
+ }
+ free (tzid_copy);
}
@@ -1745,8 +1747,10 @@ static void icalcomponent_rename_tzids_callback(icalparameter *param, void *data
/* Step through the rename table to see if the current TZID matches
any of the ones we want to rename. */
for (i = 0; i < rename_table->num_elements - 1; i += 2) {
- if (!strcmp (tzid, icalarray_element_at (rename_table, i)))
+ if (!strcmp (tzid, icalarray_element_at (rename_table, i))) {
icalparameter_set_tzid (param, icalarray_element_at (rename_table, i + 1));
+ break;
+ }
}
}
@@ -1813,13 +1817,10 @@ icaltimezone* icalcomponent_get_timezone(icalcomponent* comp, const char *tzid)
lower = middle = 0;
upper = impl->timezones->num_elements;
- fprintf (stderr, "In icalcomponent_get_timezone (%i): %s\n", upper, tzid);
-
while (lower < upper) {
middle = (lower + upper) >> 1;
zone = icalarray_element_at (impl->timezones, middle);
zone_tzid = icaltimezone_get_tzid (zone);
- fprintf (stderr, " comparing with: %s\n", zone_tzid);
cmp = strcmp (tzid, zone_tzid);
if (cmp == 0)
return zone;
@@ -1871,7 +1872,7 @@ static int icalcomponent_compare_vtimezones (icalcomponent *vtimezone1,
return -1;
/* Get the TZID property of the second VTIMEZONE. */
- prop2 = icalcomponent_get_first_property (vtimezone1, ICAL_TZID_PROPERTY);
+ prop2 = icalcomponent_get_first_property (vtimezone2, ICAL_TZID_PROPERTY);
if (!prop2)
return -1;
diff --git a/libical/src/libical/icalrecur.c b/libical/src/libical/icalrecur.c
index 99ebf022f6..d998cd0e39 100644
--- a/libical/src/libical/icalrecur.c
+++ b/libical/src/libical/icalrecur.c
@@ -459,6 +459,7 @@ struct { char* str;size_t offset; short limit; } recurmap[] =
};
/* A private routine in icalvalue.c */
+void print_date_to_string(char* str, struct icaltimetype *data);
void print_datetime_to_string(char* str, struct icaltimetype *data);
char* icalrecurrencetype_as_string(struct icalrecurrencetype *recur)
@@ -483,7 +484,10 @@ char* icalrecurrencetype_as_string(struct icalrecurrencetype *recur)
if(recur->until.year != 0){
temp[0] = 0;
- print_datetime_to_string(temp,&(recur->until));
+ if (recur->until.is_date)
+ print_date_to_string(temp,&(recur->until));
+ else
+ print_datetime_to_string(temp,&(recur->until));
icalmemory_append_string(&str,&str_p,&buf_sz,";UNTIL=");
icalmemory_append_string(&str,&str_p,&buf_sz, temp);
diff --git a/libical/src/libical/icaltimezone.c b/libical/src/libical/icaltimezone.c
index 3837888173..5afb7449f2 100644
--- a/libical/src/libical/icaltimezone.c
+++ b/libical/src/libical/icaltimezone.c
@@ -1305,7 +1305,6 @@ icaltimezone_get_builtin_timezone (const char *location)
middle = (lower + upper) >> 1;
zone = icalarray_element_at (builtin_timezones, middle);
zone_location = icaltimezone_get_location (zone);
- fprintf (stderr, " comparing with: %s\n", zone_location);
cmp = strcmp (location, zone_location);
if (cmp == 0)
return zone;
@@ -1315,7 +1314,7 @@ icaltimezone_get_builtin_timezone (const char *location)
lower = middle + 1;
}
- fprintf (stderr, " not found\n");
+ fprintf (stderr, " ***** not found\n");
return NULL;
}
diff --git a/libical/src/libical/icalvalue.c b/libical/src/libical/icalvalue.c
index e7054bb80d..8c5c1303ea 100644
--- a/libical/src/libical/icalvalue.c
+++ b/libical/src/libical/icalvalue.c
@@ -805,7 +805,6 @@ void print_datetime_to_string(char* str, struct icaltimetype *data)
print_date_to_string(str,data);
strcat(str,"T");
print_time_to_string(str,data);
-
}
const char* icalvalue_datetime_as_ical_string(icalvalue* value) {