diff -r 9f302fa29d83 -r 4c38558a4873 razor.c --- a/razor.c Mon Nov 12 00:05:03 2007 -0500 +++ b/razor.c Sat Dec 29 15:56:59 2007 -0500 @@ -1214,7 +1214,7 @@ char *prefix) { struct razor_entry *e, *f, *entries; - unsigned long next; + unsigned long next, file; char *pool; int len; @@ -1223,14 +1223,16 @@ e = entries + dir->start; do { - if (entries + *r == e) { + if (entries + (*r & RAZOR_ENTRY_MASK) == e) { printf("%s/%s\n", prefix, pool + (e->name & RAZOR_ENTRY_MASK)); + if (*r & RAZOR_ENTRY_LAST) + return NULL; r++; - if (*r >= end) - break; + if ((*r & RAZOR_ENTRY_MASK) >= end) + return r; } - } while (((e++)->name & RAZOR_ENTRY_LAST) == 0); + } while (!((e++)->name & RAZOR_ENTRY_LAST)); e = entries + dir->start; do { @@ -1249,17 +1251,16 @@ next = f->start; } - if (e->start <= *r && *r < next) { + file = *r & RAZOR_ENTRY_MASK; + if (e->start <= file && file < next) { len = strlen(prefix); prefix[len] = '/'; strcpy(prefix + len + 1, pool + (e->name & RAZOR_ENTRY_MASK)); r = list_package_files(set, r, e, next, prefix); prefix[len] = '\0'; - if (*r >= end) - break; } - } while (((e++)->name & RAZOR_ENTRY_LAST) == 0); + } while (!((e++)->name & RAZOR_ENTRY_LAST) && r != NULL); return r; }