1.1 --- a/razor.c Fri Sep 07 11:56:04 2007 -0400
1.2 +++ b/razor.c Fri Sep 07 12:11:37 2007 -0400
1.3 @@ -99,7 +99,7 @@
1.4 struct razor_set_header {
1.5 unsigned int magic;
1.6 unsigned int version;
1.7 - struct { unsigned int type, offset; } sections[0];
1.8 + struct { unsigned int type, offset, size; } sections[0];
1.9 };
1.10
1.11 #define RAZOR_MAGIC 0x7a7a7a7a
1.12 @@ -168,7 +168,7 @@
1.13
1.14 for (i = 0; i < set->header->sections[i].type; i++) {
1.15 offset = set->header->sections[i].offset;
1.16 - size = set->header->sections[i + 1].offset - offset;
1.17 + size = set->header->sections[i].size;
1.18
1.19 switch (set->header->sections[i].type) {
1.20 case RAZOR_BUCKETS:
1.21 @@ -252,30 +252,37 @@
1.22
1.23 header->sections[0].type = RAZOR_BUCKETS;
1.24 header->sections[0].offset = sizeof data;
1.25 + header->sections[0].size = set->buckets.alloc;
1.26
1.27 header->sections[1].type = RAZOR_STRINGS;
1.28 header->sections[1].offset =
1.29 header->sections[0].offset + set->buckets.alloc;
1.30 + header->sections[1].size = set->string_pool.size;
1.31
1.32 header->sections[2].type = RAZOR_PACKAGES;
1.33 header->sections[2].offset =
1.34 header->sections[1].offset + pool_size;
1.35 + header->sections[2].size = set->packages.size;
1.36
1.37 header->sections[3].type = RAZOR_REQUIRES;
1.38 header->sections[3].offset =
1.39 header->sections[2].offset + packages_size;
1.40 + header->sections[3].size = set->requires.size;
1.41
1.42 header->sections[4].type = RAZOR_PROVIDES;
1.43 header->sections[4].offset =
1.44 header->sections[3].offset + requires_size;
1.45 + header->sections[4].size = set->provides.size;
1.46
1.47 header->sections[5].type = RAZOR_PROPERTIES;
1.48 header->sections[5].offset =
1.49 header->sections[4].offset + provides_size;
1.50 + header->sections[5].size = set->property_pool.size;
1.51
1.52 header->sections[6].type = 0;
1.53 header->sections[6].offset =
1.54 header->sections[5].offset + properties_size;
1.55 + header->sections[6].size = 0;
1.56
1.57 fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0666);
1.58 if (fd < 0)
1.59 @@ -700,9 +707,6 @@
1.60 static struct razor_set *
1.61 razor_finish_import(struct import_context *ctx)
1.62 {
1.63 - struct razor_package *pkg;
1.64 - struct razor_property *prop;
1.65 -
1.66 qsort_set = ctx->set;
1.67
1.68 ctx->requires_map =
1.69 @@ -716,15 +720,6 @@
1.70 free(ctx->provides.all.data);
1.71 free(ctx->requires_map);
1.72 free(ctx->provides_map);
1.73 -
1.74 - /* FIXME: We add sentinel package/props here, but we should
1.75 - * probably just have a size field in the header section. */
1.76 - pkg = array_add(&ctx->set->packages, sizeof *pkg);
1.77 - pkg->name = 0;
1.78 - prop = array_add(&ctx->set->requires, sizeof *prop);
1.79 - prop->name = 0;
1.80 - prop = array_add(&ctx->set->provides, sizeof *prop);
1.81 - prop->name = 0;
1.82
1.83 fprintf(stderr, "parsed %d requires, %d unique\n",
1.84 ctx->requires.all.size / sizeof(struct import_property),
1.85 @@ -744,7 +739,7 @@
1.86
1.87 pool = set->string_pool.data;
1.88 end = set->packages.data + set->packages.size;
1.89 - for (p = set->packages.data; p < end && p->name; p++)
1.90 + for (p = set->packages.data; p < end; p++)
1.91 printf("%s %s\n", &pool[p->name], &pool[p->version]);
1.92 }
1.93
1.94 @@ -756,7 +751,7 @@
1.95
1.96 name = razor_set_lookup(set, package);
1.97 end = set->packages.data + set->packages.size;
1.98 - for (p = set->packages.data; p < end && p->name; p++)
1.99 + for (p = set->packages.data; p < end; p++)
1.100 if (p->name == name)
1.101 return p;
1.102
1.103 @@ -771,7 +766,7 @@
1.104
1.105 pool = set->string_pool.data;
1.106 end = properties->data + properties->size;
1.107 - for (p = properties->data; p < end && p->name; p++)
1.108 + for (p = properties->data; p < end; p++)
1.109 printf("%s %s\n", &pool[p->name], &pool[p->version]);
1.110 }
1.111