Use the package iterator for looping over file owners too.
authorKristian Høgsberg <krh@redhat.com>
Fri, 18 Jan 2008 04:36:12 +0000 (23:36 -0500)
committerKristian Høgsberg <krh@redhat.com>
Fri, 18 Jan 2008 04:36:12 +0000 (23:36 -0500)
main.c
razor.c
razor.h

diff --git a/main.c b/main.c
index af58fa4..9e6e5f1 100644 (file)
--- 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 (file)
--- 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 (file)
--- 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);