[yum-cvs] yum-metadata-parser xml-parser.c,1.6,1.7

James Bowes jbowes at linux.duke.edu
Sat Apr 7 23:52:51 UTC 2007


Update of /home/groups/yum/cvs/yum-metadata-parser
In directory login1.linux.duke.edu:/tmp/cvs-serv16271

Modified Files:
	xml-parser.c 
Log Message:
Reduce some code duplication in xml-parser

Index: xml-parser.c
===================================================================
RCS file: /home/groups/yum/cvs/yum-metadata-parser/xml-parser.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- xml-parser.c	18 Feb 2007 03:38:19 -0000	1.6
+++ xml-parser.c	7 Apr 2007 23:52:49 -0000	1.7
@@ -105,6 +105,26 @@
 }
 
 static void
+parse_version_info(const char **attrs, Package *p)
+{
+    int i;
+    const char *attr;
+    const char *value;
+
+    for (i = 0; attrs && attrs[i]; i++) {
+        attr = attrs[i];
+        value = attrs[++i];
+
+        if (!strcmp (attr, "epoch"))
+            p->epoch = g_string_chunk_insert (p->chunk, value);
+        else if (!strcmp (attr, "ver"))
+            p->version = g_string_chunk_insert (p->chunk, value);
+        else if (!strcmp (attr, "rel"))
+            p->release = g_string_chunk_insert (p->chunk, value);
+    }
+}
+
+static void
 primary_parser_package_start (PrimarySAXContext *ctx,
                               const char *name,
                               const char **attrs)
@@ -123,17 +143,7 @@
     }
 
     else if (!strcmp (name, "version")) {
-        for (i = 0; attrs && attrs[i]; i++) {
-            attr = attrs[i];
-            value = attrs[++i];
-
-            if (!strcmp (attr, "epoch"))
-                p->epoch = g_string_chunk_insert (p->chunk, value);
-            else if (!strcmp (attr, "ver"))
-                p->version = g_string_chunk_insert (p->chunk, value);
-            else if (!strcmp (attr, "rel"))
-                p->release = g_string_chunk_insert (p->chunk, value);
-        }
+        parse_version_info(attrs, p);
     }
 
     else if (!strcmp (name, "checksum")) {
@@ -556,6 +566,26 @@
 /*****************************************************************************/
 
 
+static void
+parse_package (const char **attrs, Package *p)
+{
+    int i;
+    const char *attr;
+    const char *value;
+
+    for (i = 0; attrs && attrs[i]; i++) {
+        attr = attrs[i];
+        value = attrs[++i];
+
+        if (!strcmp (attr, "pkgid"))
+            p->pkgId = g_string_chunk_insert (p->chunk, value);
+        if (!strcmp (attr, "name"))
+            p->name = g_string_chunk_insert (p->chunk, value);
+        else if (!strcmp (attr, "arch"))
+            p->arch = g_string_chunk_insert (p->chunk, value);
+    }
+}
+
 typedef enum {
     FILELIST_PARSER_TOPLEVEL = 0,
     FILELIST_PARSER_PACKAGE,
@@ -582,28 +612,12 @@
                                 const char **attrs)
 {
     if (!strcmp (name, "package")) {
-        Package *p;
-        int i;
-        const char *attr;
-        const char *value;
-
         g_assert (ctx->current_package == NULL);
 
         ctx->state = FILELIST_PARSER_PACKAGE;
 
-        ctx->current_package = p = package_new ();
-
-        for (i = 0; attrs && attrs[i]; i++) {
-            attr = attrs[i];
-            value = attrs[++i];
-
-            if (!strcmp (attr, "pkgid"))
-                p->pkgId = g_string_chunk_insert (p->chunk, value);
-            if (!strcmp (attr, "name"))
-                p->name = g_string_chunk_insert (p->chunk, value);
-            else if (!strcmp (attr, "arch"))
-                p->arch = g_string_chunk_insert (p->chunk, value);
-        }
+        ctx->current_package = package_new ();
+        parse_package (attrs, ctx->current_package);
     }
 
     else if (ctx->count_fn && !strcmp (name, "filelists")) {
@@ -639,17 +653,7 @@
     ctx->want_text = TRUE;
 
     if (!strcmp (name, "version")) {
-        for (i = 0; attrs && attrs[i]; i++) {
-            attr = attrs[i];
-            value = attrs[++i];
-
-            if (!strcmp (attr, "epoch"))
-                p->epoch = g_string_chunk_insert (p->chunk, value);
-            else if (!strcmp (attr, "ver"))
-                p->version = g_string_chunk_insert (p->chunk, value);
-            else if (!strcmp (attr, "rel"))
-                p->release = g_string_chunk_insert (p->chunk, value);
-        }
+        parse_version_info(attrs, p);
     }
 
     else if (!strcmp (name, "file")) {
@@ -869,28 +873,12 @@
                              const char **attrs)
 {
     if (!strcmp (name, "package")) {
-        Package *p;
-        int i;
-        const char *attr;
-        const char *value;
-
         g_assert (ctx->current_package == NULL);
 
         ctx->state = OTHER_PARSER_PACKAGE;
 
-        ctx->current_package = p = package_new ();
-
-        for (i = 0; attrs && attrs[i]; i++) {
-            attr = attrs[i];
-            value = attrs[++i];
-
-            if (!strcmp (attr, "pkgid"))
-                p->pkgId = g_string_chunk_insert (p->chunk, value);
-            if (!strcmp (attr, "name"))
-                p->name = g_string_chunk_insert (p->chunk, value);
-            else if (!strcmp (attr, "arch"))
-                p->arch = g_string_chunk_insert (p->chunk, value);
-        }
+        ctx->current_package = package_new ();
+        parse_package (attrs, ctx->current_package);
     }
 
     else if (ctx->count_fn && !strcmp (name, "otherdata")) {
@@ -926,17 +914,7 @@
     ctx->want_text = TRUE;
 
     if (!strcmp (name, "version")) {
-        for (i = 0; attrs && attrs[i]; i++) {
-            attr = attrs[i];
-            value = attrs[++i];
-
-            if (!strcmp (attr, "epoch"))
-                p->epoch = g_string_chunk_insert (p->chunk, value);
-            else if (!strcmp (attr, "ver"))
-                p->version = g_string_chunk_insert (p->chunk, value);
-            else if (!strcmp (attr, "rel"))
-                p->release = g_string_chunk_insert (p->chunk, value);
-        }
+        parse_version_info(attrs, p);
     }
 
     else if (!strcmp (name, "changelog")) {




More information about the Yum-cvs-commits mailing list