1.1 --- a/import.c Sat Sep 29 23:30:35 2007 -0400
1.2 +++ b/import.c Sun Oct 07 14:25:06 2007 -0400
1.3 @@ -112,7 +112,7 @@
1.4 XML_SetElementHandler(parser, start_element, end_element);
1.5 if (XML_Parse(parser, p, stat.st_size, 1) == XML_STATUS_ERROR) {
1.6 fprintf(stderr,
1.7 - "%s at line %d, %s\n",
1.8 + "%s at line %ld, %s\n",
1.9 XML_ErrorString(XML_GetErrorCode(parser)),
1.10 XML_GetCurrentLineNumber(parser),
1.11 filename);
1.12 @@ -156,7 +156,8 @@
1.13 YUM_STATE_BEGIN,
1.14 YUM_STATE_PACKAGE_NAME,
1.15 YUM_STATE_REQUIRES,
1.16 - YUM_STATE_PROVIDES
1.17 + YUM_STATE_PROVIDES,
1.18 + YUM_STATE_FILE
1.19 };
1.20
1.21 struct yum_context {
1.22 @@ -211,7 +212,8 @@
1.23 razor_importer_add_provides(ctx->importer, n, version);
1.24 break;
1.25 }
1.26 -
1.27 + } else if (strcmp(name, "file") == 0) {
1.28 + ctx->state = YUM_STATE_FILE;
1.29 }
1.30 }
1.31
1.32 @@ -220,15 +222,10 @@
1.33 {
1.34 struct yum_context *ctx = data;
1.35
1.36 + ctx->state = YUM_STATE_BEGIN;
1.37 if (strcmp(name, "package") == 0) {
1.38 free(ctx->name);
1.39 razor_importer_finish_package(ctx->importer);
1.40 - } else if (strcmp(name, "name") == 0) {
1.41 - ctx->state = YUM_STATE_BEGIN;
1.42 - } else if (strcmp(name, "rpm:requires") == 0) {
1.43 - ctx->state = YUM_STATE_BEGIN;
1.44 - } else if (strcmp(name, "rpm:provides") == 0) {
1.45 - ctx->state = YUM_STATE_BEGIN;
1.46 }
1.47 }
1.48
1.49 @@ -236,9 +233,14 @@
1.50 yum_character_data (void *data, const XML_Char *s, int len)
1.51 {
1.52 struct yum_context *ctx = data;
1.53 + char filename[PATH_MAX];
1.54
1.55 if (ctx->state == YUM_STATE_PACKAGE_NAME)
1.56 ctx->name = strndup(s, len);
1.57 + else if (ctx->state == YUM_STATE_FILE) {
1.58 + snprintf(filename, sizeof filename, "%.*s", len, s);
1.59 + razor_importer_add_file(ctx->importer, filename);
1.60 + }
1.61 }
1.62
1.63 struct razor_set *
1.64 @@ -267,7 +269,7 @@
1.65
1.66 if (XML_Parse(parser, buf, len, 0) == XML_STATUS_ERROR) {
1.67 fprintf(stderr,
1.68 - "%s at line %d\n",
1.69 + "%s at line %ld\n",
1.70 XML_ErrorString(XML_GetErrorCode(parser)),
1.71 XML_GetCurrentLineNumber(parser));
1.72 return NULL;
1.73 @@ -295,6 +297,8 @@
1.74 int_32 type, count, i;
1.75 union rpm_entry name, version, release;
1.76 union rpm_entry property_names, property_versions, property_flags;
1.77 + union rpm_entry basenames, dirnames, dirindexes;
1.78 + char filename[PATH_MAX];
1.79 rpmdb db;
1.80
1.81 rpmReadConfigFiles(NULL, NULL);
1.82 @@ -334,6 +338,19 @@
1.83 property_names.list[i],
1.84 property_versions.list[i]);
1.85
1.86 + headerGetEntry(h, RPMTAG_BASENAMES, &type,
1.87 + &basenames.p, &count);
1.88 + headerGetEntry(h, RPMTAG_DIRNAMES, &type,
1.89 + &dirnames.p, &count);
1.90 + headerGetEntry(h, RPMTAG_DIRINDEXES, &type,
1.91 + &dirindexes.p, &count);
1.92 + for (i = 0; i < count; i++) {
1.93 + snprintf(filename, sizeof filename, "%s%s",
1.94 + dirnames.list[dirindexes.flags[i]],
1.95 + basenames.list[i]);
1.96 + razor_importer_add_file(importer, filename);
1.97 + }
1.98 +
1.99 razor_importer_finish_package(importer);
1.100 }
1.101