1.1 --- a/razor.c Mon Nov 12 00:05:03 2007 -0500
1.2 +++ b/razor.c Thu Dec 27 15:46:52 2007 -0500
1.3 @@ -1214,7 +1214,7 @@
1.4 char *prefix)
1.5 {
1.6 struct razor_entry *e, *f, *entries;
1.7 - unsigned long next;
1.8 + unsigned long next, file;
1.9 char *pool;
1.10 int len;
1.11
1.12 @@ -1223,14 +1223,16 @@
1.13
1.14 e = entries + dir->start;
1.15 do {
1.16 - if (entries + *r == e) {
1.17 + if (entries + (*r & RAZOR_ENTRY_MASK) == e) {
1.18 printf("%s/%s\n", prefix,
1.19 pool + (e->name & RAZOR_ENTRY_MASK));
1.20 + if (*r & RAZOR_ENTRY_LAST)
1.21 + return NULL;
1.22 r++;
1.23 - if (*r >= end)
1.24 - break;
1.25 + if ((*r & RAZOR_ENTRY_MASK) >= end)
1.26 + return r;
1.27 }
1.28 - } while (((e++)->name & RAZOR_ENTRY_LAST) == 0);
1.29 + } while (!((e++)->name & RAZOR_ENTRY_LAST));
1.30
1.31 e = entries + dir->start;
1.32 do {
1.33 @@ -1249,17 +1251,16 @@
1.34 next = f->start;
1.35 }
1.36
1.37 - if (e->start <= *r && *r < next) {
1.38 + file = *r & RAZOR_ENTRY_MASK;
1.39 + if (e->start <= file && file < next) {
1.40 len = strlen(prefix);
1.41 prefix[len] = '/';
1.42 strcpy(prefix + len + 1,
1.43 pool + (e->name & RAZOR_ENTRY_MASK));
1.44 r = list_package_files(set, r, e, next, prefix);
1.45 prefix[len] = '\0';
1.46 - if (*r >= end)
1.47 - break;
1.48 }
1.49 - } while (((e++)->name & RAZOR_ENTRY_LAST) == 0);
1.50 + } while (!((e++)->name & RAZOR_ENTRY_LAST) && r != NULL);
1.51
1.52 return r;
1.53 }