$Log$
+Revision 410.4 2003/03/14 04:21:57 ajc
+* clone events to be encapsulated before saving, because the original
+ instance may already have a parent, and that makes crashy crashy
+
Revision 410.3 2003/03/13 05:57:17 ajc
* More encapsulation. Warning: there are bugs in this!!
1998-12-03 Nathan Bryant <bryant@cs.usm.maine.edu>
* webserver.c: warning fix
-
}
/* Encapsulate the VEVENT component into a complete VCALENDAR */
- lprintf(9, "Creating new calendar component\n");
encaps = icalcomponent_new(ICAL_VCALENDAR_COMPONENT);
if (encaps == NULL) {
lprintf(3, "Error at %s:%d - could not allocate component!\n",
/* Encapsulate the subcomponent inside */
lprintf(9, "Doing the encapsulation\n");
-
- lprintf(9, "Here's what we've got so far:\n-----%s\n-----\n",
- icalcomponent_as_ical_string(encaps)
- );
- lprintf(9, "Here's what we want to insert:\n-----%s\n-----\n",
- icalcomponent_as_ical_string(subcomp)
- );
-
icalcomponent_add_component(encaps, subcomp);
/* Convert all timestamps to UTC so we don't have to deal with
* stupid VTIMEZONE crap.
*/
- lprintf(9, "Dezonifying it all\n");
ical_dezonify(encaps);
/* Return the object we just created. */
- lprintf(9, "...done!\n");
return(encaps);
}
}
/*
- * Serialize it and save it to the message base
+ * Serialize it and save it to the message base. We clone it first,
+ * for two reasons: one, it's easier to just free the whole thing
+ * when we're done instead of unbundling, but more importantly, we
+ * can't encapsulate something that may already be encapsulated
+ * somewhere else.
*/
lprintf(9, "Encapsulating into full VCALENDAR component\n");
- encaps = ical_encapsulate_subcomponent(vevent);
+ encaps = ical_encapsulate_subcomponent(icalcomponent_new_clone(vevent));
lprintf(9, "Serializing it for saving\n");
if (encaps != NULL) {
serv_puts("ENT0 1|||4");
serv_puts(icalcomponent_as_ical_string(encaps));
serv_puts("000");
}
- if (encaps != vevent) {
- icalcomponent_remove_component(encaps, vevent);
- icalcomponent_free(encaps);
- }
+ icalcomponent_free(encaps);
}
}