From 005a06e4933b31a3f917bf134ecdcf5270ec62dd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Thu, 17 Jan 2008 23:36:12 -0500 Subject: [PATCH] Use the package iterator for looping over file owners too. --- main.c | 10 +++++++++- razor.c | 33 +++++++++++++-------------------- razor.h | 4 +++- 3 files changed, 25 insertions(+), 22 deletions(-) diff --git a/main.c b/main.c index af58fa4..9e6e5f1 100644 --- a/main.c +++ b/main.c @@ -112,11 +112,19 @@ static int command_list_file_packages(int argc, const char *argv[]) { struct razor_set *set; + struct razor_package_iterator *pi; + struct razor_package *package; + const char *name, *version; set = razor_set_open(repo_filename); if (set == NULL) return 1; - razor_set_list_file_packages(set, argv[0]); + + pi = razor_package_iterator_create_for_file(set, argv[0]); + while (razor_package_iterator_next(pi, &package, &name, &version)) + printf("%s-%s\n", name, version); + razor_package_iterator_destroy(pi); + razor_set_destroy(set); return 0; diff --git a/razor.c b/razor.c index 7a8927f..4384ec0 100644 --- a/razor.c +++ b/razor.c @@ -1161,31 +1161,24 @@ razor_set_list_files(struct razor_set *set, const char *pattern) list_dir(set, e, buffer, base); } -void -razor_set_list_file_packages(struct razor_set *set, const char *filename) +struct razor_package_iterator * +razor_package_iterator_create_for_file(struct razor_set *set, + const char *filename) { - struct razor_entry *e; - struct razor_package *packages, *p; - const char *pool; - unsigned long *r; + struct razor_entry *entry; + unsigned long *index; - e = find_entry(set, set->files.data, filename); - if (e == NULL) - return; + entry = find_entry(set, set->files.data, filename); + if (entry == NULL) + return NULL; - if (e->packages & RAZOR_IMMEDIATE) - r = &e->packages; + if (entry->packages & RAZOR_IMMEDIATE) + index = &entry->packages; else - r = (unsigned long *) set->package_pool.data + e->packages; + index = (unsigned long *) + set->package_pool.data + entry->packages; - packages = set->packages.data; - pool = set->string_pool.data; - while (1) { - p = &packages[*r & RAZOR_ENTRY_MASK]; - printf("%s-%s\n", &pool[p->name], &pool[p->version]); - if (*r++ & RAZOR_IMMEDIATE) - break; - } + return razor_package_iterator_create_with_index(set, index); } static unsigned long * diff --git a/razor.h b/razor.h index e9f37fc..edd9351 100644 --- a/razor.h +++ b/razor.h @@ -28,6 +28,9 @@ razor_package_iterator_create(struct razor_set *set); struct razor_package_iterator * razor_package_iterator_create_for_property(struct razor_set *set, struct razor_property *property); +struct razor_package_iterator * +razor_package_iterator_create_for_file(struct razor_set *set, + const char *filename); int razor_package_iterator_next(struct razor_package_iterator *pi, struct razor_package **package, @@ -46,7 +49,6 @@ void razor_property_iterator_destroy(struct razor_property_iterator *pi); void razor_set_list_files(struct razor_set *set, const char *prefix); -void razor_set_list_file_packages(struct razor_set *set, const char *filename); void razor_set_list_package_files(struct razor_set *set, const char *name); void razor_set_list_unsatisfied(struct razor_set *set); -- 1.7.1