diff -r b0e1638a9f96 -r 8e37a9f8fd70 razor.c --- a/razor.c Thu Oct 25 13:21:18 2007 -0400 +++ b/razor.c Thu Oct 25 23:35:42 2007 -0400 @@ -348,10 +348,9 @@ { unsigned long *p; - p = array_add(properties, sizeof *p); - *p = ~0ul; p = array_add(pool, properties->size); memcpy(p, properties->data, properties->size); + p[properties->size / sizeof *p - 1] |= RAZOR_IMMEDIATE; return p - (unsigned long *) pool->data; } @@ -722,8 +721,7 @@ end = links->data + links->size; for (p = links->data; p < end; p++) - if (*p != ~0) - *p = map[*p]; + *p = map[*p & RAZOR_ENTRY_MASK] | (*p & ~RAZOR_ENTRY_MASK); } static int @@ -767,7 +765,11 @@ e->start = p->count > 0 ? s : 0; s += p->count; - if (p->packages.size / sizeof *r == 1) { + if (p->packages.size == 0) { + /* FIXME: We need to make sure this is handled + * correctly as the empty list. */ + e->packages = 0 | RAZOR_IMMEDIATE; + } else if (p->packages.size / sizeof *r == 1) { r = p->packages.data; e->packages = *r | RAZOR_IMMEDIATE; } else { @@ -893,7 +895,7 @@ r = (unsigned long *) set->package_pool.data + e->packages; } - while (~*r) { + while (1) { q = array_add(&pkgs[*r & RAZOR_ENTRY_MASK], sizeof *q); *q = e - (struct razor_entry *) set->files.data; if (*r++ & RAZOR_IMMEDIATE) @@ -1049,9 +1051,11 @@ package->requires; requires = set->requires.data; pool = set->string_pool.data; - while (~*r) { - p = &requires[*r++]; + while (1) { + p = &requires[*r & RAZOR_ENTRY_MASK]; printf("%s-%s\n", &pool[p->name], &pool[p->version]); + if (*r++ & RAZOR_IMMEDIATE) + break; } } else razor_set_list_all_properties(set, &set->requires); @@ -1071,9 +1075,11 @@ package->provides; provides = set->provides.data; pool = set->string_pool.data; - while (~*r) { - p = &provides[*r++]; + while (1) { + p = &provides[*r & RAZOR_ENTRY_MASK]; printf("%s-%s\n", &pool[p->name], &pool[p->version]); + if (*r++ & RAZOR_IMMEDIATE) + break; } } else razor_set_list_all_properties(set, &set->provides); @@ -1106,7 +1112,7 @@ else r = (unsigned long *) set->package_pool.data + property->packages; - while (~*r) { + while (1) { p = &packages[*r & RAZOR_ENTRY_MASK]; printf("%s-%s\n", &pool[p->name], &pool[p->version]); if (*r++ & RAZOR_IMMEDIATE) @@ -1217,7 +1223,7 @@ packages = set->packages.data; pool = set->string_pool.data; - while (~*r) { + while (1) { p = &packages[*r & RAZOR_ENTRY_MASK]; printf("%s-%s\n", &pool[p->name], &pool[p->version]); if (*r++ & RAZOR_IMMEDIATE) @@ -1401,15 +1407,27 @@ p->requires = package->requires; p->provides = package->provides; - r = (unsigned long *) - source->set->requires_pool.data + package->requires; - while (*r != ~0) - source->requires_map[*r++] = 1; + if (package->requires & RAZOR_IMMEDIATE) + r = &package->requires; + else + r = (unsigned long *) + source->set->requires_pool.data + package->requires; + while (1) { + source->requires_map[*r & RAZOR_ENTRY_MASK] = 1; + if (*r++ & RAZOR_IMMEDIATE) + break; + } - r = (unsigned long *) - source->set->provides_pool.data + package->provides; - while (*r != ~0) - source->provides_map[*r++] = 1; + if (package->provides & RAZOR_IMMEDIATE) + r = &package->requires; + else + r = (unsigned long *) + source->set->provides_pool.data + package->provides; + while (1) { + source->provides_map[*r & RAZOR_ENTRY_MASK] = 1; + if (*r++ & RAZOR_IMMEDIATE) + break; + } } @@ -1536,14 +1554,13 @@ r = pool->size / sizeof *q; p = (unsigned long *) source_pool->data + index; - while (*p != ~0) { + while (1) { q = array_add(pool, sizeof *q); - *q = map[*p++]; + *q = map[*p & RAZOR_ENTRY_MASK] | (*p & ~RAZOR_ENTRY_MASK); + if (*p++ & RAZOR_ENTRY_LAST) + break; } - q = array_add(pool, sizeof *q); - *q = ~0; - return r; } @@ -1569,13 +1586,17 @@ ppool = set->provides_pool.data; for (pkg = set->packages.data; pkg < pkg_end; pkg++) { - for (r = &rpool[pkg->requires]; *r != ~0; r++) { - q = array_add(&requires_pkgs[*r], sizeof *q); + for (r = &rpool[pkg->requires]; ; r++) { + q = array_add(&requires_pkgs[*r & RAZOR_ENTRY_MASK], sizeof *q); *q = pkg - (struct razor_package *) set->packages.data; + if (*r & RAZOR_IMMEDIATE) + break; } - for (r = &ppool[pkg->provides]; *r != ~0; r++) { - q = array_add(&provides_pkgs[*r], sizeof *q); + for (r = &ppool[pkg->provides]; ; r++) { + q = array_add(&provides_pkgs[*r & RAZOR_ENTRY_MASK], sizeof *q); *q = pkg - (struct razor_package *) set->packages.data; + if (*r & RAZOR_IMMEDIATE) + break; } }