diff -r edd9b0fa63ca -r 13beaca8b75f librazor/razor.c --- a/librazor/razor.c Mon Jan 12 17:54:13 2009 +0000 +++ b/librazor/razor.c Fri Apr 17 23:08:11 2009 +0100 @@ -582,76 +582,22 @@ list_dir(set, e, buffer, base); } -static struct list * -list_package_files(struct razor_set *set, struct list *r, - struct razor_entry *dir, uint32_t end, - char *prefix) -{ - struct razor_entry *e, *f, *entries; - uint32_t next, file; - char *pool; - int len; - - entries = (struct razor_entry *) set->files.data; - pool = set->file_string_pool.data; - - e = entries + dir->start; - do { - if (entries + r->data == e) { - printf("%s/%s\n", prefix, pool + e->name); - r = list_next(r); - if (!r) - return NULL; - if (r->data >= end) - return r; - } - } while (!((e++)->flags & RAZOR_ENTRY_LAST)); - - e = entries + dir->start; - do { - if (e->start == 0) - continue; - - if (e->flags & RAZOR_ENTRY_LAST) - next = end; - else { - f = e + 1; - while (f->start == 0 && !(f->flags & RAZOR_ENTRY_LAST)) - f++; - if (f->start == 0) - next = end; - else - next = f->start; - } - - file = r->data; - if (e->start <= file && file < next) { - len = strlen(prefix); - prefix[len] = '/'; - strcpy(prefix + len + 1, pool + e->name); - r = list_package_files(set, r, e, next, prefix); - prefix[len] = '\0'; - } - } while (!((e++)->flags & RAZOR_ENTRY_LAST) && r != NULL); - - return r; -} - RAZOR_EXPORT void razor_set_list_package_files(struct razor_set *set, struct razor_package *package) { - struct list *r; - uint32_t end; - char buffer[512]; + struct razor_file_iterator *fi; + const char *name; assert (set != NULL); assert (package != NULL); - r = list_first(&package->files, &set->file_pool); - end = set->files.size / sizeof (struct razor_entry); - buffer[0] = '\0'; - list_package_files(set, r, set->files.data, end, buffer); + fi = razor_file_iterator_create(set, package); + + while (razor_file_iterator_next(fi, &name)) + printf("%s\n", name); + + razor_file_iterator_destroy(fi); } /* The diff order matters. We should sort the packages so that a