# HG changeset patch # User Kristian H?gsberg # Date 1195251291 18000 # Node ID 43ef0eb1b603cfc22cd712879ea9859d7cc15f00 # Parent 61fef906a84acee96a230016def5c64dd2f0f97b Fix file tree traversal to not skip the last entry. diff -r 61fef906a84a -r 43ef0eb1b603 razor.c --- a/razor.c Tue Nov 13 01:30:09 2007 -0500 +++ b/razor.c Fri Nov 16 17:14:51 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; }