import.c
changeset 56 9c00581c71be
parent 46 8de578466ece
child 59 c525dec02ef4
     1.1 --- a/import.c	Sun Oct 07 14:25:06 2007 -0400
     1.2 +++ b/import.c	Wed Oct 24 00:05:42 2007 -0400
     1.3 @@ -163,7 +163,7 @@
     1.4  struct yum_context {
     1.5  	struct razor_importer *importer;
     1.6  	struct import_property_context *current_property_context;
     1.7 -	char *name;
     1.8 +	char name[256], buffer[512], *p;
     1.9  	int state;
    1.10  };
    1.11  
    1.12 @@ -176,6 +176,7 @@
    1.13  
    1.14  	if (strcmp(name, "name") == 0) {
    1.15  		ctx->state = YUM_STATE_PACKAGE_NAME;
    1.16 +		ctx->p = ctx->name;
    1.17  	} else if (strcmp(name, "version") == 0) {
    1.18  		version = NULL;
    1.19  		for (i = 0; atts[i]; i += 2) {
    1.20 @@ -214,6 +215,7 @@
    1.21  		}
    1.22  	} else if (strcmp(name, "file") == 0) {
    1.23  		ctx->state = YUM_STATE_FILE;
    1.24 +		ctx->p = ctx->buffer;
    1.25  	}
    1.26  }
    1.27  
    1.28 @@ -223,23 +225,24 @@
    1.29  	struct yum_context *ctx = data;
    1.30  
    1.31  	ctx->state = YUM_STATE_BEGIN;
    1.32 -	if (strcmp(name, "package") == 0) {
    1.33 -		free(ctx->name);
    1.34 +	if (strcmp(name, "package") == 0)
    1.35  		razor_importer_finish_package(ctx->importer);
    1.36 -	}
    1.37 +	else if (strcmp(name, "file") == 0)
    1.38 +		razor_importer_add_file(ctx->importer, ctx->buffer);
    1.39  }
    1.40  
    1.41  static void
    1.42  yum_character_data (void *data, const XML_Char *s, int len)
    1.43  {
    1.44  	struct yum_context *ctx = data;
    1.45 -	char filename[PATH_MAX];
    1.46  
    1.47 -	if (ctx->state == YUM_STATE_PACKAGE_NAME)
    1.48 -		ctx->name = strndup(s, len);
    1.49 -	else if (ctx->state == YUM_STATE_FILE) {
    1.50 -		snprintf(filename, sizeof filename, "%.*s", len, s);
    1.51 -		razor_importer_add_file(ctx->importer, filename);
    1.52 +	switch (ctx->state) {
    1.53 +	case YUM_STATE_PACKAGE_NAME:
    1.54 +	case YUM_STATE_FILE:
    1.55 +		memcpy(ctx->p, s, len);
    1.56 +		ctx->p += len;
    1.57 +		*ctx->p = '\0';
    1.58 +		break;
    1.59  	}
    1.60  }
    1.61