import.c
changeset 47 b3c8d19f743e
parent 42 aedfc8f95227
child 48 458b03594baf
     1.1 --- a/import.c	Sat Sep 29 23:30:35 2007 -0400
     1.2 +++ b/import.c	Sun Oct 21 21:42:31 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