diff -r c51f49f38d18 -r 6a47b5fc2791 razor.c --- a/razor.c Sun Jun 08 18:29:24 2008 -0400 +++ b/razor.c Sun Jun 15 10:50:32 2008 -0400 @@ -59,6 +59,7 @@ #define RAZOR_PACKAGE_POOL 4 #define RAZOR_PROPERTY_POOL 5 #define RAZOR_FILE_POOL 6 +#define RAZOR_FILE_STRING_POOL 7 struct razor_package { uint name : 24; @@ -99,6 +100,7 @@ struct array package_pool; struct array property_pool; struct array file_pool; + struct array file_string_pool; struct razor_set_header *header; }; @@ -117,6 +119,7 @@ struct razor_importer { struct razor_set *set; struct hashtable table; + struct hashtable file_table; struct razor_package *package; struct array properties; struct array files; @@ -135,13 +138,14 @@ } struct razor_set_section razor_sections[] = { - { RAZOR_STRING_POOL, offsetof(struct razor_set, string_pool) }, - { RAZOR_PACKAGES, offsetof(struct razor_set, packages) }, - { RAZOR_PROPERTIES, offsetof(struct razor_set, properties) }, - { RAZOR_FILES, offsetof(struct razor_set, files) }, - { RAZOR_PACKAGE_POOL, offsetof(struct razor_set, package_pool) }, - { RAZOR_PROPERTY_POOL, offsetof(struct razor_set, property_pool) }, - { RAZOR_FILE_POOL, offsetof(struct razor_set, file_pool) }, + { RAZOR_STRING_POOL, offsetof(struct razor_set, string_pool) }, + { RAZOR_PACKAGES, offsetof(struct razor_set, packages) }, + { RAZOR_PROPERTIES, offsetof(struct razor_set, properties) }, + { RAZOR_FILES, offsetof(struct razor_set, files) }, + { RAZOR_PACKAGE_POOL, offsetof(struct razor_set, package_pool) }, + { RAZOR_PROPERTY_POOL, offsetof(struct razor_set, property_pool) }, + { RAZOR_FILE_POOL, offsetof(struct razor_set, file_pool) }, + { RAZOR_FILE_STRING_POOL, offsetof(struct razor_set, file_string_pool) }, }; struct razor_set * @@ -156,6 +160,8 @@ e = array_add(&set->files, sizeof *e); empty = array_add(&set->string_pool, 1); *empty = '\0'; + empty = array_add(&set->file_string_pool, 1); + *empty = '\0'; e->name = 0; e->flags = RAZOR_ENTRY_LAST; e->start = 0; @@ -393,6 +399,7 @@ importer = zalloc(sizeof *importer); importer->set = razor_set_create(); hashtable_init(&importer->table, &importer->set->string_pool); + hashtable_init(&importer->file_table, &importer->set->file_string_pool); return importer; } @@ -629,7 +636,7 @@ compare_filenames, NULL); - root.name = hashtable_tokenize(&importer->table, ""); + root.name = hashtable_tokenize(&importer->file_table, ""); array_init(&root.files); array_init(&root.packages); root.last = NULL; @@ -649,7 +656,7 @@ length = end - f; memcpy(dirname, f, length); dirname[length] ='\0'; - name = hashtable_tokenize(&importer->table, dirname); + name = hashtable_tokenize(&importer->file_table, dirname); if (d->last == NULL || d->last->name != name) { d->last = array_add(&d->files, sizeof *d); d->last->name = name; @@ -819,6 +826,7 @@ set = importer->set; hashtable_release(&importer->table); + hashtable_release(&importer->file_table); free(importer); return set; @@ -1014,7 +1022,7 @@ find_entry(struct razor_set *set, struct razor_entry *dir, const char *pattern) { struct razor_entry *e; - const char *n, *pool = set->string_pool.data; + const char *n, *pool = set->file_string_pool.data; int len; e = (struct razor_entry *) set->files.data + dir->start; @@ -1037,7 +1045,7 @@ char *prefix, const char *pattern) { struct razor_entry *e; - const char *n, *pool = set->string_pool.data; + const char *n, *pool = set->file_string_pool.data; e = (struct razor_entry *) set->files.data + dir->start; do { @@ -1111,7 +1119,7 @@ int len; entries = (struct razor_entry *) set->files.data; - pool = set->string_pool.data; + pool = set->file_string_pool.data; e = entries + dir->start; do { @@ -1258,6 +1266,7 @@ struct razor_merger { struct razor_set *set; struct hashtable table; + struct hashtable file_table; struct source source1; struct source source2; }; @@ -1272,6 +1281,7 @@ merger = zalloc(sizeof *merger); merger->set = razor_set_create(); hashtable_init(&merger->table, &merger->set->string_pool); + hashtable_init(&merger->file_table, &merger->set->file_string_pool); merger->source1.set = set1; count = set1->properties.size / sizeof (struct razor_property); @@ -1434,7 +1444,7 @@ struct razor_entry *e; e = array_add(&merger->set->files, sizeof *e); - e->name = hashtable_tokenize(&merger->table, name); + e->name = hashtable_tokenize(&merger->file_table, name); e->flags = 0; e->start = 0; @@ -1740,6 +1750,7 @@ result = merger->set; hashtable_release(&merger->table); + hashtable_release(&merger->file_table); free(merger); return result;