1.1 --- a/razor.c Wed Oct 24 12:21:29 2007 -0400
1.2 +++ b/razor.c Wed Oct 24 13:20:12 2007 -0400
1.3 @@ -740,8 +740,9 @@
1.4 }
1.5 }
1.6
1.7 -#define RAZOR_ENTRY_LAST 0x80000000ul
1.8 -#define RAZOR_ENTRY_MASK 0x00fffffful
1.9 +#define RAZOR_ENTRY_LAST 0x80000000ul
1.10 +#define RAZOR_IMMEDIATE 0x80000000ul
1.11 +#define RAZOR_ENTRY_MASK 0x00fffffful
1.12
1.13 static void
1.14 serialize_files(struct razor_set *set,
1.15 @@ -749,7 +750,7 @@
1.16 {
1.17 struct import_directory *p, *end;
1.18 struct razor_entry *e = NULL;
1.19 - unsigned long s;
1.20 + unsigned long s, *r;
1.21
1.22 p = d->files.data;
1.23 end = d->files.data + d->files.size;
1.24 @@ -759,8 +760,14 @@
1.25 e->name = p->name;
1.26 e->start = p->count > 0 ? s : 0;
1.27 s += p->count;
1.28 - e->packages = add_to_property_pool(&set->package_pool,
1.29 - &p->packages);
1.30 +
1.31 + if (p->packages.size / sizeof (unsigned long) == 1) {
1.32 + r = p->packages.data;
1.33 + e->packages = *r | RAZOR_IMMEDIATE;
1.34 + } else {
1.35 + e->packages = add_to_property_pool(&set->package_pool,
1.36 + &p->packages);
1.37 + }
1.38 array_release(&p->packages);
1.39 p++;
1.40 }
1.41 @@ -846,7 +853,7 @@
1.42 }
1.43
1.44 static void
1.45 -build_package_file_lists(struct razor_set *set)
1.46 +build_package_file_lists(struct razor_set *set, unsigned long *rmap)
1.47 {
1.48 struct razor_package *p, *packages;
1.49 struct array *pkgs;
1.50 @@ -860,10 +867,19 @@
1.51 e = set->files.data;
1.52 end = set->files.data + set->files.size;
1.53 while (e < end) {
1.54 - r = (unsigned long *) set->package_pool.data + e->packages;
1.55 + if (e->packages & RAZOR_IMMEDIATE) {
1.56 + e->packages = rmap[e->packages & RAZOR_ENTRY_MASK] |
1.57 + RAZOR_IMMEDIATE;
1.58 + r = &e->packages;
1.59 + } else {
1.60 + r = (unsigned long *) set->package_pool.data + e->packages;
1.61 + }
1.62 +
1.63 while (~*r) {
1.64 - q = array_add(&pkgs[*r++], sizeof *q);
1.65 + q = array_add(&pkgs[*r & RAZOR_ENTRY_MASK], sizeof *q);
1.66 *q = e - (struct razor_entry *) set->files.data;
1.67 + if (*r++ & RAZOR_IMMEDIATE)
1.68 + break;
1.69 }
1.70 e++;
1.71 }
1.72 @@ -906,9 +922,9 @@
1.73
1.74 build_file_tree(importer);
1.75 remap_links(&importer->set->package_pool, rmap);
1.76 + build_package_file_lists(importer->set, rmap);
1.77 free(rmap);
1.78
1.79 - build_package_file_lists(importer->set);
1.80
1.81 set = importer->set;
1.82 array_release(&importer->buckets);
1.83 @@ -1170,12 +1186,18 @@
1.84 if (e == NULL)
1.85 return;
1.86
1.87 - r = (unsigned long *) set->package_pool.data + e->packages;
1.88 + if (e->packages & RAZOR_IMMEDIATE)
1.89 + r = &e->packages;
1.90 + else
1.91 + r = (unsigned long *) set->package_pool.data + e->packages;
1.92 +
1.93 packages = set->packages.data;
1.94 pool = set->string_pool.data;
1.95 while (~*r) {
1.96 - p = &packages[*r++];
1.97 + p = &packages[*r & RAZOR_ENTRY_MASK];
1.98 printf("%s-%s\n", &pool[p->name], &pool[p->version]);
1.99 + if (*r++ & RAZOR_IMMEDIATE)
1.100 + break;
1.101 }
1.102 }
1.103