]> www.infradead.org Git - users/dwmw2/ews-sync.git/commitdiff
Convert reminder_mins/deleted_occurrences/itemid to GError
authorDavid Woodhouse <dwmw2@infradead.org>
Tue, 20 Jul 2010 23:34:45 +0000 (00:34 +0100)
committerDavid Woodhouse <dwmw2@infradead.org>
Tue, 20 Jul 2010 23:34:45 +0000 (00:34 +0100)
calitem_to_ical.c

index 6f3abbe954a1900cd782a52cef309188e0bfa466..4f4d0ba2ff3f0b1ef4d8d7b9d9d89eb713b5cd1b 100644 (file)
@@ -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 <DeletedOccurrences>\n",
-                               xml_node->name);
-                       return -1;
+                       g_set_error(error, EWS_ERROR, EWS_ERROR_PARSE,
+                                   "Unknown element %s in <DeletedOccurrences>",
+                                   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,
+                                   "<DeletedOccurrence> has no <Start>");
+                       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)