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);
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") ||
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;
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 &&
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)
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;
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);
icalcomponent_add_property(comp, prop);
icalcomponent_add_component(calcomp, comp);
- return 0;
+ return TRUE;
}
static const char *ews_tz_to_ical(const char *ewstz)