diff -r c525dec02ef4 -r e5479fd779af import.c --- a/import.c Wed Oct 24 12:21:29 2007 -0400 +++ b/import.c Thu Oct 25 23:31:09 2007 -0400 @@ -171,7 +171,8 @@ yum_start_element(void *data, const char *name, const char **atts) { struct yum_context *ctx = data; - const char *n, *version; + const char *n, *version, *release; + char buffer[128]; int i; if (strcmp(name, "name") == 0) { @@ -179,11 +180,21 @@ ctx->p = ctx->name; } else if (strcmp(name, "version") == 0) { version = NULL; + release = NULL; for (i = 0; atts[i]; i += 2) { if (strcmp(atts[i], "ver") == 0) version = atts[i + 1]; + else if (strcmp(atts[i], "rel") == 0) + release = atts[i + 1]; } - razor_importer_begin_package(ctx->importer, ctx->name, version); + if (version == NULL || release == NULL) { + fprintf(stderr, "invalid version tag, " + "missing version or release attribute\n"); + return; + } + + snprintf(buffer, sizeof buffer, "%s-%s", version, release); + razor_importer_begin_package(ctx->importer, ctx->name, buffer); } else if (strcmp(name, "rpm:requires") == 0) { ctx->state = YUM_STATE_REQUIRES; } else if (strcmp(name, "rpm:provides") == 0) { @@ -192,11 +203,14 @@ ctx->state != YUM_STATE_BEGIN) { n = NULL; version = NULL; + release = NULL; for (i = 0; atts[i]; i += 2) { if (strcmp(atts[i], "name") == 0) n = atts[i + 1]; else if (strcmp(atts[i], "ver") == 0) version = atts[i + 1]; + else if (strcmp(atts[i], "rel") == 0) + release = atts[i + 1]; } if (n == NULL) { @@ -205,12 +219,20 @@ return; } + if (version && release) + snprintf(buffer, sizeof buffer, + "%s-%s", version, release); + else if (version) + strcpy(buffer, version); + else + buffer[0] = '\0'; + switch (ctx->state) { case YUM_STATE_REQUIRES: - razor_importer_add_requires(ctx->importer, n, version); + razor_importer_add_requires(ctx->importer, n, buffer); break; case YUM_STATE_PROVIDES: - razor_importer_add_provides(ctx->importer, n, version); + razor_importer_add_provides(ctx->importer, n, buffer); break; } } else if (strcmp(name, "file") == 0) { @@ -255,6 +277,7 @@ int len; ctx.importer = razor_importer_new(); + ctx.state = YUM_STATE_BEGIN; parser = XML_ParserCreate(NULL); XML_SetUserData(parser, &ctx);