1.1 --- a/import.c Sun Oct 07 14:25:06 2007 -0400
1.2 +++ b/import.c Sun Oct 21 22:41:14 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