Use the package iterator for looping over file owners too.
1.1 --- a/main.c Thu Jan 17 23:28:37 2008 -0500
1.2 +++ b/main.c Thu Jan 17 23:36:12 2008 -0500
1.3 @@ -112,11 +112,19 @@
1.4 command_list_file_packages(int argc, const char *argv[])
1.5 {
1.6 struct razor_set *set;
1.7 + struct razor_package_iterator *pi;
1.8 + struct razor_package *package;
1.9 + const char *name, *version;
1.10
1.11 set = razor_set_open(repo_filename);
1.12 if (set == NULL)
1.13 return 1;
1.14 - razor_set_list_file_packages(set, argv[0]);
1.15 +
1.16 + pi = razor_package_iterator_create_for_file(set, argv[0]);
1.17 + while (razor_package_iterator_next(pi, &package, &name, &version))
1.18 + printf("%s-%s\n", name, version);
1.19 + razor_package_iterator_destroy(pi);
1.20 +
1.21 razor_set_destroy(set);
1.22
1.23 return 0;
2.1 --- a/razor.c Thu Jan 17 23:28:37 2008 -0500
2.2 +++ b/razor.c Thu Jan 17 23:36:12 2008 -0500
2.3 @@ -1161,31 +1161,24 @@
2.4 list_dir(set, e, buffer, base);
2.5 }
2.6
2.7 -void
2.8 -razor_set_list_file_packages(struct razor_set *set, const char *filename)
2.9 +struct razor_package_iterator *
2.10 +razor_package_iterator_create_for_file(struct razor_set *set,
2.11 + const char *filename)
2.12 {
2.13 - struct razor_entry *e;
2.14 - struct razor_package *packages, *p;
2.15 - const char *pool;
2.16 - unsigned long *r;
2.17 + struct razor_entry *entry;
2.18 + unsigned long *index;
2.19
2.20 - e = find_entry(set, set->files.data, filename);
2.21 - if (e == NULL)
2.22 - return;
2.23 + entry = find_entry(set, set->files.data, filename);
2.24 + if (entry == NULL)
2.25 + return NULL;
2.26
2.27 - if (e->packages & RAZOR_IMMEDIATE)
2.28 - r = &e->packages;
2.29 + if (entry->packages & RAZOR_IMMEDIATE)
2.30 + index = &entry->packages;
2.31 else
2.32 - r = (unsigned long *) set->package_pool.data + e->packages;
2.33 + index = (unsigned long *)
2.34 + set->package_pool.data + entry->packages;
2.35
2.36 - packages = set->packages.data;
2.37 - pool = set->string_pool.data;
2.38 - while (1) {
2.39 - p = &packages[*r & RAZOR_ENTRY_MASK];
2.40 - printf("%s-%s\n", &pool[p->name], &pool[p->version]);
2.41 - if (*r++ & RAZOR_IMMEDIATE)
2.42 - break;
2.43 - }
2.44 + return razor_package_iterator_create_with_index(set, index);
2.45 }
2.46
2.47 static unsigned long *
3.1 --- a/razor.h Thu Jan 17 23:28:37 2008 -0500
3.2 +++ b/razor.h Thu Jan 17 23:36:12 2008 -0500
3.3 @@ -28,6 +28,9 @@
3.4 struct razor_package_iterator *
3.5 razor_package_iterator_create_for_property(struct razor_set *set,
3.6 struct razor_property *property);
3.7 +struct razor_package_iterator *
3.8 +razor_package_iterator_create_for_file(struct razor_set *set,
3.9 + const char *filename);
3.10
3.11 int razor_package_iterator_next(struct razor_package_iterator *pi,
3.12 struct razor_package **package,
3.13 @@ -46,7 +49,6 @@
3.14 razor_property_iterator_destroy(struct razor_property_iterator *pi);
3.15
3.16 void razor_set_list_files(struct razor_set *set, const char *prefix);
3.17 -void razor_set_list_file_packages(struct razor_set *set, const char *filename);
3.18 void razor_set_list_package_files(struct razor_set *set, const char *name);
3.19
3.20 void razor_set_list_unsatisfied(struct razor_set *set);