From: Kristian Høgsberg Date: Sun, 7 Oct 2007 18:25:06 +0000 (-0400) Subject: Extend importers to also pick up filelists for packages. X-Git-Tag: 0.1~314 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=eca0279dab6793c059ef9c6a4a0d494a980a6e34;p=razor.git Extend importers to also pick up filelists for packages. --- diff --git a/import.c b/import.c index b840992..5857486 100644 --- a/import.c +++ b/import.c @@ -112,7 +112,7 @@ import_rzr_file(struct razor_importer *importer, const char *filename) XML_SetElementHandler(parser, start_element, end_element); if (XML_Parse(parser, p, stat.st_size, 1) == XML_STATUS_ERROR) { fprintf(stderr, - "%s at line %d, %s\n", + "%s at line %ld, %s\n", XML_ErrorString(XML_GetErrorCode(parser)), XML_GetCurrentLineNumber(parser), filename); @@ -156,7 +156,8 @@ enum { YUM_STATE_BEGIN, YUM_STATE_PACKAGE_NAME, YUM_STATE_REQUIRES, - YUM_STATE_PROVIDES + YUM_STATE_PROVIDES, + YUM_STATE_FILE }; struct yum_context { @@ -211,7 +212,8 @@ yum_start_element(void *data, const char *name, const char **atts) razor_importer_add_provides(ctx->importer, n, version); break; } - + } else if (strcmp(name, "file") == 0) { + ctx->state = YUM_STATE_FILE; } } @@ -220,15 +222,10 @@ yum_end_element (void *data, const char *name) { struct yum_context *ctx = data; + ctx->state = YUM_STATE_BEGIN; if (strcmp(name, "package") == 0) { free(ctx->name); razor_importer_finish_package(ctx->importer); - } else if (strcmp(name, "name") == 0) { - ctx->state = YUM_STATE_BEGIN; - } else if (strcmp(name, "rpm:requires") == 0) { - ctx->state = YUM_STATE_BEGIN; - } else if (strcmp(name, "rpm:provides") == 0) { - ctx->state = YUM_STATE_BEGIN; } } @@ -236,9 +233,14 @@ static void yum_character_data (void *data, const XML_Char *s, int len) { struct yum_context *ctx = data; + char filename[PATH_MAX]; if (ctx->state == YUM_STATE_PACKAGE_NAME) ctx->name = strndup(s, len); + else if (ctx->state == YUM_STATE_FILE) { + snprintf(filename, sizeof filename, "%.*s", len, s); + razor_importer_add_file(ctx->importer, filename); + } } struct razor_set * @@ -267,7 +269,7 @@ razor_set_create_from_yum_filelist(int fd) if (XML_Parse(parser, buf, len, 0) == XML_STATUS_ERROR) { fprintf(stderr, - "%s at line %d\n", + "%s at line %ld\n", XML_ErrorString(XML_GetErrorCode(parser)), XML_GetCurrentLineNumber(parser)); return NULL; @@ -295,6 +297,8 @@ razor_set_create_from_rpmdb(void) int_32 type, count, i; union rpm_entry name, version, release; union rpm_entry property_names, property_versions, property_flags; + union rpm_entry basenames, dirnames, dirindexes; + char filename[PATH_MAX]; rpmdb db; rpmReadConfigFiles(NULL, NULL); @@ -334,6 +338,19 @@ razor_set_create_from_rpmdb(void) property_names.list[i], property_versions.list[i]); + headerGetEntry(h, RPMTAG_BASENAMES, &type, + &basenames.p, &count); + headerGetEntry(h, RPMTAG_DIRNAMES, &type, + &dirnames.p, &count); + headerGetEntry(h, RPMTAG_DIRINDEXES, &type, + &dirindexes.p, &count); + for (i = 0; i < count; i++) { + snprintf(filename, sizeof filename, "%s%s", + dirnames.list[dirindexes.flags[i]], + basenames.list[i]); + razor_importer_add_file(importer, filename); + } + razor_importer_finish_package(importer); } diff --git a/razor.c b/razor.c index 99ccb2a..d827650 100644 --- a/razor.c +++ b/razor.c @@ -450,6 +450,11 @@ razor_importer_add_provides(struct razor_importer *importer, &importer->provides, name, version); } +void +razor_importer_add_file(struct razor_importer *importer, const char *name) +{ +} + struct razor_importer * razor_importer_new(void) { diff --git a/razor.h b/razor.h index 3b0b6ef..fd12cc6 100644 --- a/razor.h +++ b/razor.h @@ -45,6 +45,8 @@ void razor_importer_add_requires(struct razor_importer *importer, const char *name, const char *version); void razor_importer_add_provides(struct razor_importer *importer, const char *name, const char *version); +void razor_importer_add_file(struct razor_importer *importer, + const char *name); void razor_importer_finish_package(struct razor_importer *importer); struct razor_set *razor_importer_finish(struct razor_importer *importer);