razor.c
changeset 88 4c38558a4873
parent 79 9f302fa29d83
child 91 6884cefd1b8c
     1.1 --- a/razor.c	Mon Nov 12 00:05:03 2007 -0500
     1.2 +++ b/razor.c	Sat Dec 29 15:56:59 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  }