import.c
changeset 65 8fec3db93757
parent 59 c525dec02ef4
child 66 bb4ca4a47f66
     1.1 --- a/import.c	Wed Oct 24 12:21:29 2007 -0400
     1.2 +++ b/import.c	Sun Oct 28 22:50:57 2007 -0400
     1.3 @@ -171,7 +171,8 @@
     1.4  yum_start_element(void *data, const char *name, const char **atts)
     1.5  {
     1.6  	struct yum_context *ctx = data;
     1.7 -	const char *n, *version;
     1.8 +	const char *n, *version, *release;
     1.9 +	char buffer[128];
    1.10  	int i;
    1.11  
    1.12  	if (strcmp(name, "name") == 0) {
    1.13 @@ -179,11 +180,21 @@
    1.14  		ctx->p = ctx->name;
    1.15  	} else if (strcmp(name, "version") == 0) {
    1.16  		version = NULL;
    1.17 +		release = NULL;
    1.18  		for (i = 0; atts[i]; i += 2) {
    1.19  			if (strcmp(atts[i], "ver") == 0)
    1.20  				version = atts[i + 1];
    1.21 +			else if (strcmp(atts[i], "rel") == 0)
    1.22 +				release = atts[i + 1];
    1.23  		}
    1.24 -		razor_importer_begin_package(ctx->importer, ctx->name, version);
    1.25 +		if (version == NULL || release == NULL) {
    1.26 +			fprintf(stderr, "invalid version tag, "
    1.27 +				"missing version or  release attribute\n");
    1.28 +			return;
    1.29 +		}
    1.30 +
    1.31 +		snprintf(buffer, sizeof buffer, "%s-%s", version, release);
    1.32 +		razor_importer_begin_package(ctx->importer, ctx->name, buffer);
    1.33  	} else if (strcmp(name, "rpm:requires") == 0) {
    1.34  		ctx->state = YUM_STATE_REQUIRES;
    1.35  	} else if (strcmp(name, "rpm:provides") == 0) {
    1.36 @@ -192,11 +203,14 @@
    1.37  		   ctx->state != YUM_STATE_BEGIN) {
    1.38  		n = NULL;
    1.39  		version = NULL;
    1.40 +		release = NULL;
    1.41  		for (i = 0; atts[i]; i += 2) {
    1.42  			if (strcmp(atts[i], "name") == 0)
    1.43  				n = atts[i + 1];
    1.44  			else if (strcmp(atts[i], "ver") == 0)
    1.45  				version = atts[i + 1];
    1.46 +			else if (strcmp(atts[i], "rel") == 0)
    1.47 +				release = atts[i + 1];
    1.48  		}
    1.49  
    1.50  		if (n == NULL) {
    1.51 @@ -205,12 +219,20 @@
    1.52  			return;
    1.53  		}
    1.54  
    1.55 +		if (version && release)
    1.56 +			snprintf(buffer, sizeof buffer,
    1.57 +				 "%s-%s", version, release);
    1.58 +		else if (version)
    1.59 +			strcpy(buffer, version);
    1.60 +		else
    1.61 +			buffer[0] = '\0';
    1.62 +			
    1.63  		switch (ctx->state) {
    1.64  		case YUM_STATE_REQUIRES:
    1.65 -			razor_importer_add_requires(ctx->importer, n, version);
    1.66 +			razor_importer_add_requires(ctx->importer, n, buffer);
    1.67  			break;
    1.68  		case YUM_STATE_PROVIDES:
    1.69 -			razor_importer_add_provides(ctx->importer, n, version);
    1.70 +			razor_importer_add_provides(ctx->importer, n, buffer);
    1.71  			break;
    1.72  		}
    1.73  	} else if (strcmp(name, "file") == 0) {
    1.74 @@ -255,6 +277,7 @@
    1.75  	int len;
    1.76  
    1.77  	ctx.importer = razor_importer_new();	
    1.78 +	ctx.state = YUM_STATE_BEGIN;
    1.79  
    1.80  	parser = XML_ParserCreate(NULL);
    1.81  	XML_SetUserData(parser, &ctx);