From e2c8f78fb3d4434e4d71aedd9b96c03b17835bf3 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Sun, 13 Mar 2016 13:52:22 -0700 Subject: [PATCH] parse-xml: Add ability to limit versions dumped. --- parse-detail-xml | 2 +- parse-xml.c | 62 ++++++++++++++++++++++++++++++++---------------- 2 files changed, 42 insertions(+), 22 deletions(-) diff --git a/parse-detail-xml b/parse-detail-xml index 0eb3555a74..15a19341e5 100755 --- a/parse-detail-xml +++ b/parse-detail-xml @@ -4,6 +4,6 @@ legacyXML=`ls -1 unzipped/*/*.xml |grep -vE 'outputViewer|stats|chart|model'` if test -n "$1"; then for d in $legacyXML; do - ./parse-xml $d $1 + ./parse-xml $d "$@" done fi diff --git a/parse-xml.c b/parse-xml.c index 70a7a89928..4d352ce8d8 100644 --- a/parse-xml.c +++ b/parse-xml.c @@ -236,6 +236,21 @@ print_text (xmlNode *node) } } +static void +check_version (xmlNode *root, const char *version) +{ + const char *s = (char *) xmlGetProp (root, (xmlChar *) "version"); + if (!s) + { + fprintf (stderr, "missing version\n"); + exit (1); + } + else if (strcmp(version, s)) + { + exit (0); + } +} + static void usage (void) { @@ -246,7 +261,7 @@ usage (void) int main (int argc, char **argv) { - if (argc != 3) + if (argc < 3) usage (); LIBXML_TEST_VERSION; @@ -268,26 +283,31 @@ main (int argc, char **argv) root->next = NULL; #endif - if (!strcmp(argv[2], "parents")) - print_parents (root); - else if (!strcmp(argv[2], "containment")) - print_containment (root); - else if (!strcmp(argv[2], "attributes")) - print_attributes (root); - else if (!strcmp(argv[2], "cdata")) - print_cdata (root); - else if (!strcmp(argv[2], "text")) - print_text (root); - else if (!strncmp(argv[2], "element:", 8)) - print_element (doc, root, argv[2] + 8); - else if (!strncmp(argv[2], "attr:", 5)) - print_attribute (root, argv[2] + 5); - else if (!strncmp(argv[2], "id:", 3)) - print_id (doc, root, argv[2] + 3); - else if (!strcmp(argv[2], "labels")) - print_labels (root); - else - usage (); + for (int i = 2; i < argc; i++) + { + if (!strcmp(argv[i], "parents")) + print_parents (root); + else if (!strcmp(argv[i], "containment")) + print_containment (root); + else if (!strcmp(argv[i], "attributes")) + print_attributes (root); + else if (!strcmp(argv[i], "cdata")) + print_cdata (root); + else if (!strcmp(argv[i], "text")) + print_text (root); + else if (!strncmp(argv[i], "element:", 8)) + print_element (doc, root, argv[i] + 8); + else if (!strncmp(argv[i], "attr:", 5)) + print_attribute (root, argv[i] + 5); + else if (!strncmp(argv[i], "id:", 3)) + print_id (doc, root, argv[i] + 3); + else if (!strcmp(argv[i], "labels")) + print_labels (root); + else if (!strncmp(argv[i], "version=", 8)) + check_version (root, argv[i] + 8); + else + usage (); + } xmlFreeDoc(doc); xmlCleanupParser(); -- 2.30.2