[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