]> www.infradead.org Git - users/dwmw2/ews-sync.git/commitdiff
Split fetch item to test recursion
authorDavid Woodhouse <dwmw2@infradead.org>
Thu, 22 Jul 2010 12:14:56 +0000 (13:14 +0100)
committerDavid Woodhouse <dwmw2@infradead.org>
Thu, 22 Jul 2010 12:14:56 +0000 (13:14 +0100)
ews2ical.c

index 994be148a99072d803aa8c68332a6b3b903117dd..9d9a6d2634e70329d3da0f21dcdcc21c90c08d1a 100644 (file)
 
 #include "libews.h"
 
-FILE *calfile;
+icalcomponent *fetch_item(int xmlfd, GError **error);
 
 int main(int argc, char **argv)
 {
+       FILE *calfile;
        GError *error = NULL;
        icalcomponent *calcomp;
-       xmlDocPtr xml_doc;
-       xmlNode *xml_node;
        int xmlfd = 0; /* stdin */
-       char buf[1];
        char *outbuf;
 
        if (argc >= 2) {
@@ -53,23 +51,41 @@ int main(int argc, char **argv)
                fprintf(stderr, "Too many args. Want only xml file and ical file\n");
                return -1;
        }
+       calcomp = fetch_item(xmlfd, &error);
+
+       if (!calcomp) {
+               fprintf(stderr, "Failed to convert: %s\n", error->message);
+               g_clear_error(&error);
+               return 1;
+       }
+       outbuf =icalcomponent_as_ical_string_r(calcomp);
+       fprintf(calfile, "%s", outbuf);
+       free(outbuf);
+       return 0;
+}
+
+icalcomponent *fetch_item(int xmlfd, GError **error)
+{
+       xmlDocPtr xml_doc;
+       xmlNode *xml_node;
+       char buf[1];
        read(xmlfd, buf, 1);
        if (*buf == '<')
                lseek(xmlfd, 0, SEEK_SET);
        xml_doc = xmlReadFd(xmlfd, "noname.xml", "utf-8", XML_PARSE_RECOVER);
        if (!xml_doc) {
                fprintf(stderr, "Failed to parse XML\n");
-               return -1;
+               exit(1);
        }
        xml_node = xmlDocGetRootElement(xml_doc);
        if (!xml_node) {
                fprintf(stderr, "Failed to parse XML\n");
-               return -1;
+               exit(1);
        }
        if (xml_node->type != XML_ELEMENT_NODE ||
            strcmp((char *)xml_node->name, "Envelope")) {
                fprintf(stderr, "Root node not as expected: %s\n", xml_node->name);
-               return -1;
+               exit(1);
        }
        for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
                if (xml_node->type == XML_ELEMENT_NODE &&
@@ -78,7 +94,7 @@ int main(int argc, char **argv)
        }
        if (!xml_node) {
                fprintf(stderr, "SOAP Body node not found\n");
-               return -1;
+               exit(1);
        }
 
        for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
@@ -88,7 +104,7 @@ int main(int argc, char **argv)
        }
        if (!xml_node) {
                fprintf(stderr, "GetItemResponse node not found\n");
-               return -1;
+               exit(1);
        }
 
        for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
@@ -98,7 +114,7 @@ int main(int argc, char **argv)
        }
        if (!xml_node) {
                fprintf(stderr, "ResponseMessages node not found\n");
-               return -1;
+               exit(1);
        }
 
        for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
@@ -108,7 +124,7 @@ int main(int argc, char **argv)
        }
        if (!xml_node) {
                fprintf(stderr, "GetItemResponseMessage node not found\n");
-               return -1;
+               exit(1);
        }
 
        for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
@@ -118,7 +134,7 @@ int main(int argc, char **argv)
        }
        if (!xml_node) {
                fprintf(stderr, "Items node not found\n");
-               return -1;
+               exit(1);
        }
 
        for (xml_node = xml_node->children; xml_node; xml_node = xml_node->next) {
@@ -128,20 +144,9 @@ int main(int argc, char **argv)
        }
        if (!xml_node) {
                fprintf(stderr, "CalendarItem node not found\n");
-               return -1;
+               exit(1);
        }
 
-       calcomp = ews_calitem_to_ical(xml_node, NULL, NULL, NULL, NULL, &error);
-
-       if (!calcomp) {
-               fprintf(stderr, "Failed to convert: %s\n", error->message);
-               g_clear_error(&error);
-               return 1;
-       }
-       outbuf =icalcomponent_as_ical_string_r(calcomp);
-       fprintf(calfile, "%s", outbuf);
-       free(outbuf);
-
-       return 0;
+       return ews_calitem_to_ical(xml_node, NULL, NULL, NULL, NULL, error);
 }