Use a seperate string pool for files
authorJames Bowes <jbowes@redhat.com>
Sun Jun 15 10:50:32 2008 -0400 (2008-06-15)
changeset 2276a47b5fc2791
parent 226 6d9713bfc346
child 228 8b9849d1e5b0
Use a seperate string pool for files
razor.c
     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;