1.1 --- a/razor.c Fri Sep 07 14:00:19 2007 -0400
1.2 +++ b/razor.c Fri Sep 07 14:17:39 2007 -0400
1.3 @@ -174,11 +174,6 @@
1.4 size = set->header->sections[i].size;
1.5
1.6 switch (set->header->sections[i].type) {
1.7 - case RAZOR_BUCKETS:
1.8 - set->buckets.data = (void *) set->header + offset;
1.9 - set->buckets.size = size;
1.10 - set->buckets.alloc = size;
1.11 - break;
1.12 case RAZOR_STRINGS:
1.13 set->string_pool.data = (void *) set->header + offset;
1.14 set->string_pool.size = size;
1.15 @@ -222,6 +217,7 @@
1.16 ;
1.17 size = set->header->sections[i].type;
1.18 munmap(set->header, size);
1.19 + free(set->buckets.data);
1.20 } else {
1.21 free(set->buckets.data);
1.22 free(set->string_pool.data);
1.23 @@ -239,65 +235,43 @@
1.24 {
1.25 char data[4096];
1.26 struct razor_set_header *header = (struct razor_set_header *) data;
1.27 - int fd, pool_size, packages_size, requires_size, provides_size;
1.28 - int properties_size;
1.29 -
1.30 - /* Align these to pages sizes */
1.31 - pool_size = (set->string_pool.size + 4095) & ~4095;
1.32 - packages_size = (set->packages.size + 4095) & ~4095;
1.33 - requires_size = (set->requires.size + 4095) & ~4095;
1.34 - provides_size = (set->provides.size + 4095) & ~4095;
1.35 - properties_size = (set->property_pool.size + 4095) & ~4095;
1.36 + unsigned long offset;
1.37 + int i, fd;
1.38 + struct { int type; struct array *array; } sections[] = {
1.39 + { RAZOR_STRINGS, &set->string_pool },
1.40 + { RAZOR_PACKAGES, &set->packages },
1.41 + { RAZOR_REQUIRES, &set->requires },
1.42 + { RAZOR_PROVIDES, &set->provides },
1.43 + { RAZOR_PROPERTIES, &set->property_pool },
1.44 + { 0 }
1.45 + };
1.46
1.47 memset(data, 0, sizeof data);
1.48 header->magic = RAZOR_MAGIC;
1.49 header->version = RAZOR_VERSION;
1.50 + offset = sizeof data;
1.51
1.52 - header->sections[0].type = RAZOR_BUCKETS;
1.53 - header->sections[0].offset = sizeof data;
1.54 - header->sections[0].size = set->buckets.alloc;
1.55 + for (i = 0; sections[i].type != 0; i++) {
1.56 + header->sections[i].type = sections[i].type;
1.57 + header->sections[i].offset = offset;
1.58 + header->sections[i].size = sections[i].array->size;
1.59 + offset += (sections[i].array->size + 4095) & ~4095;
1.60 + }
1.61
1.62 - header->sections[1].type = RAZOR_STRINGS;
1.63 - header->sections[1].offset =
1.64 - header->sections[0].offset + set->buckets.alloc;
1.65 - header->sections[1].size = set->string_pool.size;
1.66 -
1.67 - header->sections[2].type = RAZOR_PACKAGES;
1.68 - header->sections[2].offset =
1.69 - header->sections[1].offset + pool_size;
1.70 - header->sections[2].size = set->packages.size;
1.71 -
1.72 - header->sections[3].type = RAZOR_REQUIRES;
1.73 - header->sections[3].offset =
1.74 - header->sections[2].offset + packages_size;
1.75 - header->sections[3].size = set->requires.size;
1.76 -
1.77 - header->sections[4].type = RAZOR_PROVIDES;
1.78 - header->sections[4].offset =
1.79 - header->sections[3].offset + requires_size;
1.80 - header->sections[4].size = set->provides.size;
1.81 -
1.82 - header->sections[5].type = RAZOR_PROPERTIES;
1.83 - header->sections[5].offset =
1.84 - header->sections[4].offset + provides_size;
1.85 - header->sections[5].size = set->property_pool.size;
1.86 -
1.87 - header->sections[6].type = 0;
1.88 - header->sections[6].offset =
1.89 - header->sections[5].offset + properties_size;
1.90 - header->sections[6].size = 0;
1.91 + header->sections[i].type = 0;
1.92 + header->sections[i].offset = 0;
1.93 + header->sections[i].size = 0;
1.94
1.95 fd = open(filename, O_CREAT | O_WRONLY | O_TRUNC, 0666);
1.96 if (fd < 0)
1.97 return -1;
1.98
1.99 write_to_fd(fd, data, sizeof data);
1.100 - write_to_fd(fd, set->buckets.data, set->buckets.alloc);
1.101 - write_to_fd(fd, set->string_pool.data, pool_size);
1.102 - write_to_fd(fd, set->packages.data, packages_size);
1.103 - write_to_fd(fd, set->requires.data, requires_size);
1.104 - write_to_fd(fd, set->provides.data, provides_size);
1.105 - write_to_fd(fd, set->property_pool.data, properties_size);
1.106 + for (i = 0; sections[i].type != 0; i++)
1.107 + write_to_fd(fd, sections[i].array->data,
1.108 + (sections[i].array->size + 4095) & ~4095);
1.109 +
1.110 + close(fd);
1.111
1.112 return 0;
1.113 }
1.114 @@ -955,9 +929,6 @@
1.115 size = set->header->sections[i + 1].offset - offset;
1.116
1.117 switch (set->header->sections[i].type) {
1.118 - case RAZOR_BUCKETS:
1.119 - printf("bucket section:\t\t%dkb\n", size / 1024);
1.120 - break;
1.121 case RAZOR_STRINGS:
1.122 printf("string pool:\t\t%dkb\n", size / 1024);
1.123 break;