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) {
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) {
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) {
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) {
int len;
ctx.importer = razor_importer_new();
+ ctx.state = YUM_STATE_BEGIN;
parser = XML_ParserCreate(NULL);
XML_SetUserData(parser, &ctx);