From: Kristian Høgsberg Date: Fri, 18 Jan 2008 04:36:12 +0000 (-0500) Subject: Use the package iterator for looping over file owners too. X-Git-Tag: 0.1~258 X-Git-Url: http://project.juiblex.co.uk/git/?a=commitdiff_plain;h=005a06e4933b31a3f917bf134ecdcf5270ec62dd;p=razor.git Use the package iterator for looping over file owners too. --- 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);