1.1 --- a/razor.c Sun Jun 15 10:50:16 2008 -0400
1.2 +++ b/razor.c Sun Jun 15 10:50:32 2008 -0400
1.3 @@ -59,6 +59,7 @@
1.4 #define RAZOR_PACKAGE_POOL 4
1.5 #define RAZOR_PROPERTY_POOL 5
1.6 #define RAZOR_FILE_POOL 6
1.7 +#define RAZOR_FILE_STRING_POOL 7
1.8
1.9 struct razor_package {
1.10 uint name : 24;
1.11 @@ -99,6 +100,7 @@
1.12 struct array package_pool;
1.13 struct array property_pool;
1.14 struct array file_pool;
1.15 + struct array file_string_pool;
1.16 struct razor_set_header *header;
1.17 };
1.18
1.19 @@ -117,6 +119,7 @@
1.20 struct razor_importer {
1.21 struct razor_set *set;
1.22 struct hashtable table;
1.23 + struct hashtable file_table;
1.24 struct razor_package *package;
1.25 struct array properties;
1.26 struct array files;
1.27 @@ -135,13 +138,14 @@
1.28 }
1.29
1.30 struct razor_set_section razor_sections[] = {
1.31 - { RAZOR_STRING_POOL, offsetof(struct razor_set, string_pool) },
1.32 - { RAZOR_PACKAGES, offsetof(struct razor_set, packages) },
1.33 - { RAZOR_PROPERTIES, offsetof(struct razor_set, properties) },
1.34 - { RAZOR_FILES, offsetof(struct razor_set, files) },
1.35 - { RAZOR_PACKAGE_POOL, offsetof(struct razor_set, package_pool) },
1.36 - { RAZOR_PROPERTY_POOL, offsetof(struct razor_set, property_pool) },
1.37 - { RAZOR_FILE_POOL, offsetof(struct razor_set, file_pool) },
1.38 + { RAZOR_STRING_POOL, offsetof(struct razor_set, string_pool) },
1.39 + { RAZOR_PACKAGES, offsetof(struct razor_set, packages) },
1.40 + { RAZOR_PROPERTIES, offsetof(struct razor_set, properties) },
1.41 + { RAZOR_FILES, offsetof(struct razor_set, files) },
1.42 + { RAZOR_PACKAGE_POOL, offsetof(struct razor_set, package_pool) },
1.43 + { RAZOR_PROPERTY_POOL, offsetof(struct razor_set, property_pool) },
1.44 + { RAZOR_FILE_POOL, offsetof(struct razor_set, file_pool) },
1.45 + { RAZOR_FILE_STRING_POOL, offsetof(struct razor_set, file_string_pool) },
1.46 };
1.47
1.48 struct razor_set *
1.49 @@ -156,6 +160,8 @@
1.50 e = array_add(&set->files, sizeof *e);
1.51 empty = array_add(&set->string_pool, 1);
1.52 *empty = '\0';
1.53 + empty = array_add(&set->file_string_pool, 1);
1.54 + *empty = '\0';
1.55 e->name = 0;
1.56 e->flags = RAZOR_ENTRY_LAST;
1.57 e->start = 0;
1.58 @@ -393,6 +399,7 @@
1.59 importer = zalloc(sizeof *importer);
1.60 importer->set = razor_set_create();
1.61 hashtable_init(&importer->table, &importer->set->string_pool);
1.62 + hashtable_init(&importer->file_table, &importer->set->file_string_pool);
1.63
1.64 return importer;
1.65 }
1.66 @@ -629,7 +636,7 @@
1.67 compare_filenames,
1.68 NULL);
1.69
1.70 - root.name = hashtable_tokenize(&importer->table, "");
1.71 + root.name = hashtable_tokenize(&importer->file_table, "");
1.72 array_init(&root.files);
1.73 array_init(&root.packages);
1.74 root.last = NULL;
1.75 @@ -649,7 +656,7 @@
1.76 length = end - f;
1.77 memcpy(dirname, f, length);
1.78 dirname[length] ='\0';
1.79 - name = hashtable_tokenize(&importer->table, dirname);
1.80 + name = hashtable_tokenize(&importer->file_table, dirname);
1.81 if (d->last == NULL || d->last->name != name) {
1.82 d->last = array_add(&d->files, sizeof *d);
1.83 d->last->name = name;
1.84 @@ -819,6 +826,7 @@
1.85
1.86 set = importer->set;
1.87 hashtable_release(&importer->table);
1.88 + hashtable_release(&importer->file_table);
1.89 free(importer);
1.90
1.91 return set;
1.92 @@ -1014,7 +1022,7 @@
1.93 find_entry(struct razor_set *set, struct razor_entry *dir, const char *pattern)
1.94 {
1.95 struct razor_entry *e;
1.96 - const char *n, *pool = set->string_pool.data;
1.97 + const char *n, *pool = set->file_string_pool.data;
1.98 int len;
1.99
1.100 e = (struct razor_entry *) set->files.data + dir->start;
1.101 @@ -1037,7 +1045,7 @@
1.102 char *prefix, const char *pattern)
1.103 {
1.104 struct razor_entry *e;
1.105 - const char *n, *pool = set->string_pool.data;
1.106 + const char *n, *pool = set->file_string_pool.data;
1.107
1.108 e = (struct razor_entry *) set->files.data + dir->start;
1.109 do {
1.110 @@ -1111,7 +1119,7 @@
1.111 int len;
1.112
1.113 entries = (struct razor_entry *) set->files.data;
1.114 - pool = set->string_pool.data;
1.115 + pool = set->file_string_pool.data;
1.116
1.117 e = entries + dir->start;
1.118 do {
1.119 @@ -1258,6 +1266,7 @@
1.120 struct razor_merger {
1.121 struct razor_set *set;
1.122 struct hashtable table;
1.123 + struct hashtable file_table;
1.124 struct source source1;
1.125 struct source source2;
1.126 };
1.127 @@ -1272,6 +1281,7 @@
1.128 merger = zalloc(sizeof *merger);
1.129 merger->set = razor_set_create();
1.130 hashtable_init(&merger->table, &merger->set->string_pool);
1.131 + hashtable_init(&merger->file_table, &merger->set->file_string_pool);
1.132
1.133 merger->source1.set = set1;
1.134 count = set1->properties.size / sizeof (struct razor_property);
1.135 @@ -1434,7 +1444,7 @@
1.136 struct razor_entry *e;
1.137
1.138 e = array_add(&merger->set->files, sizeof *e);
1.139 - e->name = hashtable_tokenize(&merger->table, name);
1.140 + e->name = hashtable_tokenize(&merger->file_table, name);
1.141 e->flags = 0;
1.142 e->start = 0;
1.143
1.144 @@ -1740,6 +1750,7 @@
1.145
1.146 result = merger->set;
1.147 hashtable_release(&merger->table);
1.148 + hashtable_release(&merger->file_table);
1.149 free(merger);
1.150
1.151 return result;