From 0bd7ffc91b74ba3e7bcff42e869487c9f5905266 Mon Sep 17 00:00:00 2001 From: David Woodhouse Date: Wed, 21 Jul 2010 00:34:45 +0100 Subject: [PATCH] Convert reminder_mins/deleted_occurrences/itemid to GError --- calitem_to_ical.c | 70 +++++++++++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 29 deletions(-) diff --git a/calitem_to_ical.c b/calitem_to_ical.c index 6f3abbe..4f4d0ba 100644 --- a/calitem_to_ical.c +++ b/calitem_to_ical.c @@ -41,10 +41,10 @@ gboolean process_sequence(icalcomponent *comp, xmlNode *xml_node, GError **error gboolean process_body(icalcomponent *comp, xmlNode *xml_node, GError **error); gboolean process_subject(icalcomponent *comp, xmlNode *xml_node, GError **error); int process_recurrence(icalcomponent *comp, xmlNode *xml_node, icaltimezone *zone, GError **error); -int process_deleted_occurrences(icalcomponent *comp, xmlNode *xml_node, - icaltimetype **deletia, int *count, GError **error); -int process_itemid(icalcomponent *comp, xmlNode *xmlnode, GError **error); -int process_reminder_mins(icalcomponent *comp, xmlNode *xmlnode, GError **error); +gboolean process_deleted_occurrences(icalcomponent *comp, xmlNode *xml_node, + icaltimetype **deletia, int *count, GError **error); +gboolean process_itemid(icalcomponent *comp, xmlNode *xmlnode, GError **error); +gboolean process_reminder_mins(icalcomponent *comp, xmlNode *xmlnode, GError **error); icaltimezone *get_timezone(xmlNode *xmlnode, GError **error); icaltimezone *get_meeting_timezone(xmlNode *xml_node, GError **error); @@ -107,16 +107,19 @@ icalcomponent *ews_calitem_to_ical(xmlNode *xml_node, GError **error) goto err; } else if (!strcmp((char *)xml_node->name, "Recurrence")) process_recurrence(comp, xml_node, icaltz, error); - else if (!strcmp((char *)xml_node->name, "DeletedOccurrences")) - process_deleted_occurrences(comp, xml_node, &deletia, &deletia_count, error); - else if (!strcmp((char *)xml_node->name, "ItemId")) - process_itemid(comp, xml_node, error); - else if (!strcmp((char *)xml_node->name, "IsAllDayEvent")) { + else if (!strcmp((char *)xml_node->name, "DeletedOccurrences")) { + if (!process_deleted_occurrences(comp, xml_node, &deletia, &deletia_count, error)) + goto err; + } else if (!strcmp((char *)xml_node->name, "ItemId")) { + if (!process_itemid(comp, xml_node, error)) + goto err; + } else if (!strcmp((char *)xml_node->name, "IsAllDayEvent")) { if (!process_truefalse(comp, xml_node, &allday, error)) goto err; - } else if (!strcmp((char *)xml_node->name, "ReminderMinutesBeforeStart")) - process_reminder_mins(comp, xml_node, error); - else if (!strcmp((char *)xml_node->name, "AppointmentSequenceNumber")) { + } else if (!strcmp((char *)xml_node->name, "ReminderMinutesBeforeStart")) { + if (!process_reminder_mins(comp, xml_node, error)) + goto err; + } else if (!strcmp((char *)xml_node->name, "AppointmentSequenceNumber")) { if (!process_sequence(comp, xml_node, error)) goto err; } else if (!strcmp((char *)xml_node->name, "ParentFolderId") || @@ -481,8 +484,8 @@ static int weekindex_to_ical(const char *week, GError **error) return 0; } -int process_deleted_occurrences(icalcomponent *comp, xmlNode *xml_node, - icaltimetype **deletia_ret, int *count_ret, GError **error) +gboolean process_deleted_occurrences(icalcomponent *comp, xmlNode *xml_node, + icaltimetype **deletia_ret, int *count_ret, GError **error) { icaltimetype *deletia = NULL; int count = 0; @@ -492,9 +495,10 @@ int process_deleted_occurrences(icalcomponent *comp, xmlNode *xml_node, if (xml_node->type != XML_ELEMENT_NODE) continue; if (strcmp((char *)xml_node->name, "DeletedOccurrence")) { - fprintf(stderr, "Unknown element %s in \n", - xml_node->name); - return -1; + g_set_error(error, EWS_ERROR, EWS_ERROR_PARSE, + "Unknown element %s in ", + xml_node->name); + return FALSE; } for (xml_node2 = xml_node->children; xml_node2; xml_node2 = xml_node2->next) { if (xml_node2->type == XML_ELEMENT_NODE && @@ -502,19 +506,20 @@ int process_deleted_occurrences(icalcomponent *comp, xmlNode *xml_node, break; } if (!xml_node2) { - fprintf(stderr, "DeletedOccurrence has no Start\n"); - return -1; + g_set_error(error, EWS_ERROR, EWS_ERROR_PARSE, + " has no "); + return FALSE; } count++; deletia = realloc(deletia, sizeof(icaltimetype) * count); if (!process_time(comp, xml_node2, &deletia[count-1], error)) { free(deletia); - return -1; + return FALSE; } } *deletia_ret = deletia; *count_ret = count; - return 0; + return TRUE; } int process_recurrence(icalcomponent *comp, xmlNode *xml_node, icaltimezone *zone, GError **error) @@ -590,16 +595,20 @@ int process_recurrence(icalcomponent *comp, xmlNode *xml_node, icaltimezone *zon return 0; } -int process_itemid(icalcomponent *comp, xmlNode *xml_node, GError **error) +gboolean process_itemid(icalcomponent *comp, xmlNode *xml_node, GError **error) { const char *id = (char *)xmlGetProp(xml_node, (unsigned char *)"Id"); - if (!id) - return -1; + if (!id) { + g_set_error(error, EWS_ERROR, EWS_ERROR_PARSE, + "<%s> node is empty", xml_node->name); + return FALSE; + } icalcomponent_set_uid(comp, id); - return 0; + return TRUE; } -int process_reminder_mins(icalcomponent *calcomp, xmlNode *xml_node, GError **error) + +gboolean process_reminder_mins(icalcomponent *calcomp, xmlNode *xml_node, GError **error) { const char *minutes; int minutesnr; @@ -608,8 +617,11 @@ int process_reminder_mins(icalcomponent *calcomp, xmlNode *xml_node, GError **er struct icaltriggertype trig; minutes = (char *)xmlNodeGetContent(xml_node); - if (!minutes) - return -1; + if (!minutes) { + g_set_error(error, EWS_ERROR, EWS_ERROR_PARSE, + "<%s> node is empty", xml_node->name); + return FALSE; + } minutesnr = strtol(minutes, NULL, 10); @@ -623,7 +635,7 @@ int process_reminder_mins(icalcomponent *calcomp, xmlNode *xml_node, GError **er icalcomponent_add_property(comp, prop); icalcomponent_add_component(calcomp, comp); - return 0; + return TRUE; } static const char *ews_tz_to_ical(const char *ewstz) -- 2.49.0