convert razor_package_get_details() and razor_package_iterator_next() to varargs
authorRichard Hughes <richard@hughsie.com>
Mon, 30 Jun 2008 07:51:26 +0000 (08:51 +0100)
committerRichard Hughes <richard@hughsie.com>
Mon, 30 Jun 2008 07:51:26 +0000 (08:51 +0100)
The functions for getting package details about a package were limited to a few
things, when in the future we will want to support much more about a package.
The iterator was also limited to name,version,arch when most of the time we
didn't need all this data.

librazor/iterator.c
librazor/razor-internal.h
librazor/razor.c
librazor/razor.h
librazor/transaction.c
src/main.c
src/rpm.c

index 5a870cc..e40425a 100644 (file)
@@ -19,6 +19,7 @@
 
 #define _GNU_SOURCE
 
+#include <stdarg.h>
 #include <string.h>
 #include <assert.h>
 
@@ -105,14 +106,21 @@ razor_package_iterator_create_for_file(struct razor_set *set,
        return razor_package_iterator_create_with_index(set, index);
 }
 
+/**
+ * razor_package_iterator_next:
+ * @pi: a %razor_package_iterator
+ * @package: a %razor_package
+ *
+ * Gets the next iteratr along with any vararg data.
+ * The vararg must be terminated with zero.
+ *
+ * Example: razor_package_iterator_next (pi, package, RAZOR_DETAIL_NAME, &name, 0);
+ **/
 RAZOR_EXPORT int
 razor_package_iterator_next(struct razor_package_iterator *pi,
-                           struct razor_package **package,
-                           const char **name,
-                           const char **version,
-                           const char **arch)
+                           struct razor_package **package, ...)
 {
-       char *pool;
+       va_list args;
        int valid;
        struct razor_package *p, *packages;
 
@@ -129,16 +137,17 @@ razor_package_iterator_next(struct razor_package_iterator *pi,
        } else
                valid = 0;
 
-       if (valid) {
-               pool = pi->set->string_pool.data;
-               *package = p;
-               *name = &pool[p->name];
-               *version = &pool[p->version];
-               *arch = &pool[p->arch];
-       } else {
+       if (valid == 0) {
                *package = NULL;
+               goto out;
        }
 
+       *package = p;
+
+       va_start(args, NULL);
+       razor_package_get_details_varg (pi->set, p, args);
+       va_end (args);
+out:
        return valid;
 }
 
@@ -260,13 +269,12 @@ razor_package_query_add_iterator(struct razor_package_query *pq,
                                 struct razor_package_iterator *pi)
 {
        struct razor_package *packages, *p;
-       const char *name, *version, *arch;
 
        assert (pq != NULL);
        assert (pi != NULL);
 
        packages = pq->set->packages.data;
-       while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
+       while (razor_package_iterator_next(pi, &p, 0)) {
                pq->count += pq->vector[p - packages] ^ 1;
                pq->vector[p - packages] = 1;
        }
index bf98cde..c47e4f1 100644 (file)
@@ -22,6 +22,9 @@
 
 #include <stdlib.h>
 #include <stdint.h>
+#include <stdarg.h>
+
+#include "razor.h"
 
 /* GCC visibility */
 #if defined(__GNUC__) && __GNUC__ >= 4
@@ -207,6 +210,11 @@ razor_merger_finish(struct razor_merger *merger);
 
 /* Utility functions */
 
+void
+razor_package_get_details_varg(struct razor_set *set,
+                              struct razor_package *package,
+                              va_list args);
+
 int razor_create_dir(const char *root, const char *path);
 int razor_write(int fd, const void *data, size_t size);
 
index 88ff7a7..d3cab33 100644 (file)
@@ -23,6 +23,7 @@
 #include <stddef.h>
 #include <stdint.h>
 #include <stdio.h>
+#include <stdarg.h>
 #include <string.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -387,13 +388,13 @@ razor_set_get_package(struct razor_set *set, const char *package)
 {
        struct razor_package_iterator *pi;
        struct razor_package *p;
-       const char *name, *version, *arch;
+       const char *name;
 
        assert (set != NULL);
        assert (package != NULL);
 
        pi = razor_package_iterator_create(set);
-       while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
+       while (razor_package_iterator_next(pi, &p, RAZOR_DETAIL_NAME, &name, 0)) {
                if (strcmp(package, name) == 0)
                        break;
        }
@@ -402,25 +403,94 @@ razor_set_get_package(struct razor_set *set, const char *package)
        return p;
 }
 
+static const char *
+razor_package_get_details_type(struct razor_set *set,
+                              struct razor_package *package,
+                              enum razor_detail_type type)
+{
+       const char *pool;
+
+       switch (type) {
+       case RAZOR_DETAIL_NAME:
+               pool = set->string_pool.data;
+               return &pool[package->name];
+
+       case RAZOR_DETAIL_VERSION:
+               pool = set->string_pool.data;
+               return &pool[package->version];
+
+       case RAZOR_DETAIL_ARCH:
+               pool = set->string_pool.data;
+               return &pool[package->arch];
+
+       case RAZOR_DETAIL_SUMMARY:
+               pool = set->details_string_pool.data;
+               return &pool[package->summary];
+
+       case RAZOR_DETAIL_DESCRIPTION:
+               pool = set->details_string_pool.data;
+               return &pool[package->description];
+
+       case RAZOR_DETAIL_URL:
+               pool = set->details_string_pool.data;
+               return &pool[package->url];
+
+       case RAZOR_DETAIL_LICENSE:
+               pool = set->details_string_pool.data;
+               return &pool[package->license];
+
+       default:
+               fprintf(stderr, "type %u not found\n", type);
+               return NULL;
+       }
+}
+
+/**
+ * razor_package_get_details_varg:
+ * @set: a %razor_set
+ * @package: a %razor_package
+ * @args: a va_list of arguments to set
+ **/
+void
+razor_package_get_details_varg(struct razor_set *set,
+                              struct razor_package *package,
+                              va_list args)
+{
+       int i;
+       enum razor_detail_type type;
+       const char **data;
+
+       for (i = 0;; i += 2) {
+               type = va_arg(args, enum razor_detail_type);
+               if (type == 0)
+                       break;
+               data = va_arg(args, const char **);
+               *data = razor_package_get_details_type(set, package, type);
+       }
+
+}
+
+/**
+ * razor_package_get_details:
+ * @set: a %razor_set
+ * @package: a %razor_package
+ *
+ * Gets details about a package using a varg interface
+ * The vararg must be terminated with zero.
+ *
+ * Example: razor_package_get_details (set, package, RAZOR_DETAIL_URL, &url, 0);
+ **/
 RAZOR_EXPORT void
-razor_package_get_details(struct razor_set *set,
-                         struct razor_package *package,
-                         const char **summary, const char **description,
-                         const char **url, const char **license)
+razor_package_get_details(struct razor_set *set, struct razor_package *package, ...)
 {
-       const char *pool = set->details_string_pool.data;
+       va_list args;
 
        assert (set != NULL);
        assert (package != NULL);
 
-       if (summary != NULL)
-               *summary = &pool[package->summary];
-       if (description != NULL)
-               *description = &pool[package->description];
-       if (url != NULL)
-               *url = &pool[package->url];
-       if (license != NULL)
-               *license = &pool[package->license];
+       va_start(args, NULL);
+       razor_package_get_details_varg (set, package, args);
+       va_end (args);
 }
 
 RAZOR_EXPORT const char *
@@ -647,8 +717,16 @@ razor_set_diff(struct razor_set *set, struct razor_set *upstream,
        pi1 = razor_package_iterator_create(set);
        pi2 = razor_package_iterator_create(upstream);
 
-       razor_package_iterator_next(pi1, &p1, &name1, &version1, &arch1);
-       razor_package_iterator_next(pi2, &p2, &name2, &version2, &arch2);
+       razor_package_iterator_next(pi1, &p1,
+                                   RAZOR_DETAIL_NAME, &name1,
+                                   RAZOR_DETAIL_VERSION, &version1,
+                                   RAZOR_DETAIL_ARCH, &arch1,
+                                   0);
+       razor_package_iterator_next(pi2, &p2,
+                                   RAZOR_DETAIL_NAME, &name2,
+                                   RAZOR_DETAIL_VERSION, &version2,
+                                   RAZOR_DETAIL_ARCH, &arch2,
+                                   0);
 
        while (p1 || p2) {
                if (p1 && p2) {
@@ -668,10 +746,16 @@ razor_set_diff(struct razor_set *set, struct razor_set *upstream,
 
                if (p1 != NULL && res <= 0)
                        razor_package_iterator_next(pi1, &p1,
-                                                   &name1, &version1, &arch1);
+                                                   RAZOR_DETAIL_NAME, &name1,
+                                                   RAZOR_DETAIL_VERSION, &version1,
+                                                   RAZOR_DETAIL_ARCH, &arch1,
+                                                   0);
                if (p2 != NULL && res >= 0)
                        razor_package_iterator_next(pi2, &p2,
-                                                   &name2, &version2, &arch2);
+                                                   RAZOR_DETAIL_NAME, &name2,
+                                                   RAZOR_DETAIL_VERSION, &version2,
+                                                   RAZOR_DETAIL_ARCH, &arch2,
+                                                   0);
        }
 
        razor_package_iterator_destroy(pi1);
index 61edc1c..9f3c668 100644 (file)
@@ -28,6 +28,16 @@ enum razor_repo_file_type {
        RAZOR_REPO_FILE_FILES
 };
 
+enum razor_detail_type {
+       RAZOR_DETAIL_NAME = 1, /* 0 is the marker for the vararg */
+       RAZOR_DETAIL_VERSION,
+       RAZOR_DETAIL_ARCH,
+       RAZOR_DETAIL_SUMMARY,
+       RAZOR_DETAIL_DESCRIPTION,
+       RAZOR_DETAIL_URL,
+       RAZOR_DETAIL_LICENSE
+};
+
 enum razor_property_flags {
        RAZOR_PROPERTY_LESS             = 1 << 0,
        RAZOR_PROPERTY_GREATER          = 1 << 1,
@@ -84,9 +94,7 @@ struct razor_package *
 razor_set_get_package(struct razor_set *set, const char *package);
 
 void
-razor_package_get_details(struct razor_set *set, struct razor_package *package,
-                         const char **summary, const char **description,
-                         const char **url, const char **license);
+razor_package_get_details(struct razor_set *set, struct razor_package *package, ...);
 
 
 /**
@@ -136,10 +144,7 @@ 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,
-                               const char **name,
-                               const char **version,
-                               const char **arch);
+                               struct razor_package **package, ...);
 void razor_package_iterator_destroy(struct razor_package_iterator *pi);
 
 struct razor_package_query *
index 11ccc74..9efd5cd 100644 (file)
@@ -294,7 +294,7 @@ remove_matching_providers(struct razor_transaction *trans,
        struct razor_package *pkg, *pkgs;
        struct razor_package_iterator pkg_iter;
        struct razor_set *set;
-       const char *n, *v, *a;
+       const char *n, *v;
        uint32_t type;
 
        if (ppi->present == trans->system.properties)
@@ -316,8 +316,9 @@ remove_matching_providers(struct razor_transaction *trans,
                        continue;
 
                razor_package_iterator_init_for_property(&pkg_iter, set, p);
-               while (razor_package_iterator_next(&pkg_iter,
-                                                  &pkg, &n, &v, &a)) {
+               while (razor_package_iterator_next(&pkg_iter, &pkg,
+                                                  RAZOR_DETAIL_NAME, &n,
+                                                  RAZOR_DETAIL_VERSION, &v, 0)) {
                        fprintf(stderr, "removing %s-%s\n", n, v);
                        razor_transaction_remove_package(trans, pkg);
                }
@@ -335,7 +336,7 @@ flag_matching_providers(struct razor_transaction *trans,
        struct razor_package *pkg, *pkgs;
        struct razor_package_iterator pkg_iter;
        struct razor_set *set;
-       const char *name, *version, *arch;
+       const char *name, *version;
        uint32_t *flags, type;
 
        if (ppi->present == trans->system.properties) {
@@ -362,7 +363,8 @@ flag_matching_providers(struct razor_transaction *trans,
 
                razor_package_iterator_init_for_property(&pkg_iter, set, p);
                while (razor_package_iterator_next(&pkg_iter, &pkg,
-                                                  &name, &version, &arch)) {
+                                                  RAZOR_DETAIL_NAME, &name,
+                                                  RAZOR_DETAIL_VERSION, &version, 0)) {
 
                        fprintf(stderr, "flagging %s-%s for providing %s matching %s %s\n",
                                name, version,
@@ -511,7 +513,7 @@ update_unsatisfied_packages(struct razor_transaction *trans)
        struct razor_property *sp;
        struct prop_iter spi;
        struct razor_package_iterator pkg_iter;
-       const char *name, *version, *arch;
+       const char *name;
 
        spkgs = trans->system.set->packages.data;
        prop_iter_init(&spi, &trans->system);
@@ -524,7 +526,7 @@ update_unsatisfied_packages(struct razor_transaction *trans)
                                                         trans->system.set,
                                                         sp);
                while (razor_package_iterator_next(&pkg_iter, &pkg,
-                                                  &name, &version, &arch)) {
+                                                  RAZOR_DETAIL_NAME, &name, 0)) {
                        fprintf(stderr, "updating %s because %s %s %s "
                                "isn't satisfied\n",
                                name, spi.pool + sp->name,
@@ -556,7 +558,7 @@ update_conflicted_packages(struct razor_transaction *trans)
        struct razor_property *up, *sp;
        struct prop_iter spi, upi;
        struct razor_package_iterator pkg_iter;
-       const char *name, *version, *arch;
+       const char *name, *version;
 
        spkgs = trans->system.set->packages.data;
        prop_iter_init(&spi, &trans->system);
@@ -575,7 +577,8 @@ update_conflicted_packages(struct razor_transaction *trans)
                                                         trans->system.set,
                                                         sp);
                while (razor_package_iterator_next(&pkg_iter, &pkg,
-                                                  &name, &version, &arch)) {
+                                                  RAZOR_DETAIL_NAME, &name,
+                                                  RAZOR_DETAIL_VERSION, &version, 0)) {
                        fprintf(stderr, "updating %s %s because it "
                                "conflicts with %s\n",
                                name, version, spi.pool + sp->name);
@@ -657,13 +660,15 @@ flush_scheduled_system_updates(struct razor_transaction *trans)
        struct razor_package_iterator *pi;
        struct razor_package *p, *pkg, *spkgs;
        struct prop_iter ppi;
-       const char *name, *version, *arch;
+       const char *name, *version;
 
        spkgs = trans->system.set->packages.data;
        pi = razor_package_iterator_create(trans->system.set);
        prop_iter_init(&ppi, &trans->upstream);
 
-       while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
+       while (razor_package_iterator_next(pi, &p,
+                                          RAZOR_DETAIL_NAME, &name,
+                                          RAZOR_DETAIL_VERSION, &version, 0)) {
                if (!(trans->system.packages[p - spkgs] & TRANS_PACKAGE_UPDATE))
                        continue;
 
@@ -692,13 +697,15 @@ flush_scheduled_upstream_updates(struct razor_transaction *trans)
        struct razor_package_iterator *pi;
        struct razor_package *p, *upkgs;
        struct prop_iter spi;
-       const char *name, *version, *arch;
+       const char *name, *version;
 
        upkgs = trans->upstream.set->packages.data;
        pi = razor_package_iterator_create(trans->upstream.set);
        prop_iter_init(&spi, &trans->system);
 
-       while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
+       while (razor_package_iterator_next(pi, &p,
+                                          RAZOR_DETAIL_NAME, &name,
+                                          RAZOR_DETAIL_VERSION, &version, 0)) {
                if (!(trans->upstream.packages[p - upkgs] & TRANS_PACKAGE_UPDATE))
                        continue;
 
@@ -745,14 +752,18 @@ describe_unsatisfied(struct razor_set *set, struct razor_property *rp)
        if (pool[rp->version] == '\0') {
                razor_package_iterator_init_for_property(&pi, set, rp);
                while (razor_package_iterator_next(&pi, &pkg,
-                                                  &name, &version, &arch))
+                                                  RAZOR_DETAIL_NAME, &name,
+                                                  RAZOR_DETAIL_VERSION, &version,
+                                                  RAZOR_DETAIL_ARCH, &arch, 0))
                        fprintf(stderr, "%s is needed by %s-%s.%s\n",
                                &pool[rp->name],
                                name, version, arch);
        } else {
                razor_package_iterator_init_for_property(&pi, set, rp);
                while (razor_package_iterator_next(&pi, &pkg,
-                                                  &name, &version, &arch))
+                                                  RAZOR_DETAIL_NAME, &name,
+                                                  RAZOR_DETAIL_VERSION, &version,
+                                                  RAZOR_DETAIL_ARCH, &arch, 0))
                        fprintf(stderr, "%s %s %s is needed by %s-%s.%s\n",
                                &pool[rp->name],
                                razor_property_relation_to_string(rp),
index 4e15164..56b3b2c 100644 (file)
@@ -47,7 +47,7 @@ create_iterator_from_argv(struct razor_set *set, int argc, const char *argv[])
        struct razor_package_query *query;
        struct razor_package_iterator *iter;
        struct razor_package *package;
-       const char *name, *version, *arch, *pattern;
+       const char *name, *pattern;
        int i, count;
 
        if (argc == 0)
@@ -59,8 +59,7 @@ create_iterator_from_argv(struct razor_set *set, int argc, const char *argv[])
                iter = razor_package_iterator_create(set);
                pattern = argv[i];
                count = 0;
-               while (razor_package_iterator_next(iter, &package,
-                                                  &name, &version, &arch)) {
+               while (razor_package_iterator_next(iter, &package, RAZOR_DETAIL_NAME, &name, 0)) {
                        if (fnmatch(pattern, name, 0) != 0)
                                continue;
 
@@ -86,7 +85,9 @@ list_packages(struct razor_package_iterator *iter, uint32_t flags)
        const char *name, *version, *arch;
 
        while (razor_package_iterator_next(iter, &package,
-                                          &name, &version, &arch)) {
+                                          RAZOR_DETAIL_NAME, &name,
+                                          RAZOR_DETAIL_VERSION, &version,
+                                          RAZOR_DETAIL_ARCH, &arch, 0)) {
                if (flags & LIST_PACKAGES_ONLY_NAMES)
                        printf("%s\n", name);
                else
@@ -425,12 +426,12 @@ mark_packages_for_update(struct razor_transaction *trans,
 {
        struct razor_package_iterator *pi;
        struct razor_package *package;
-       const char *name, *version, *arch;
+       const char *name;
        int matches = 0;
 
        pi = razor_package_iterator_create(set);
        while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch)) {
+                                          RAZOR_DETAIL_NAME, &name, 0)) {
                if (pattern && fnmatch(pattern, name, 0) == 0) {
                        razor_transaction_update_package(trans, package);
                        matches++;
@@ -447,12 +448,11 @@ mark_packages_for_removal(struct razor_transaction *trans,
 {
        struct razor_package_iterator *pi;
        struct razor_package *package;
-       const char *name, *version, *arch;
+       const char *name;
        int matches = 0;
 
        pi = razor_package_iterator_create(set);
-       while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch)) {
+       while (razor_package_iterator_next(pi, &package, RAZOR_DETAIL_NAME, &name, 0)) {
                if (pattern && fnmatch(pattern, name, 0) == 0) {
                        razor_transaction_remove_package(trans, package);
                        matches++;
@@ -660,7 +660,9 @@ download_packages(struct razor_set *system, struct razor_set *next)
        pi = razor_set_create_install_iterator(system, next);
        errors = 0;
        while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch)) {
+                                          RAZOR_DETAIL_NAME, &name,
+                                          RAZOR_DETAIL_VERSION, &version,
+                                          RAZOR_DETAIL_ARCH, &arch, 0)) {
                snprintf(url, sizeof url,
                         "%s/Packages/%s",
                         yum_url, rpm_filename(name, version, arch));
@@ -690,7 +692,9 @@ install_packages(struct razor_set *system, struct razor_set *next)
 
        pi = razor_set_create_install_iterator(system, next);
        while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch)) {
+                                          RAZOR_DETAIL_NAME, &name,
+                                          RAZOR_DETAIL_VERSION, &version,
+                                          RAZOR_DETAIL_ARCH, &arch, 0)) {
                printf("install %s-%s\n", name, version);
 
                snprintf(file, sizeof file,
@@ -796,7 +800,9 @@ command_download(int argc, const char *argv[])
        set = razor_set_open(rawhide_repo_filename);
        pi = razor_package_iterator_create(set);
        while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch)) {
+                                          RAZOR_DETAIL_NAME, &name,
+                                          RAZOR_DETAIL_VERSION, &version,
+                                          RAZOR_DETAIL_ARCH, &arch, 0)) {
                if (pattern && fnmatch(pattern, name, 0) != 0)
                        continue;
 
@@ -837,12 +843,18 @@ command_info(int argc, const char *argv[])
                return 1;
        pi = razor_package_iterator_create(set);
        while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch)) {
+                                          RAZOR_DETAIL_NAME, &name,
+                                          RAZOR_DETAIL_VERSION, &version,
+                                          RAZOR_DETAIL_ARCH, &arch, 0)) {
                if (pattern && fnmatch(pattern, name, 0) != 0)
                        continue;
 
-               razor_package_get_details (set, package, &summary, &description,
-                                          &url, &license);
+               razor_package_get_details (set, package,
+                                          RAZOR_DETAIL_SUMMARY, &summary,
+                                          RAZOR_DETAIL_DESCRIPTION, &description,
+                                          RAZOR_DETAIL_URL, &url,
+                                          RAZOR_DETAIL_LICENSE, &license,
+                                          0);
 
                printf ("Name:        %s\n", name);
                printf ("Arch:        %s\n", arch);
index 872f926..76f2414 100644 (file)
--- a/src/rpm.c
+++ b/src/rpm.c
@@ -303,7 +303,7 @@ add_command_line_packages(struct razor_set *set,
 {
        struct razor_package *package;
        struct razor_package_iterator *pi;
-       const char *name, *version, *arch;
+       const char *name;
        int i, cmp, errors;
 
        qsort(argv, argc, sizeof(*argv), strcmpp);
@@ -313,7 +313,7 @@ add_command_line_packages(struct razor_set *set,
        pi = razor_package_iterator_create(set);
 
        while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch)) {
+                                          RAZOR_DETAIL_NAME, &name, 0)) {
                while (cmp = strcmp(argv[i], name), cmp < 0 && i < argc) {
                        fprintf(stderr, "error: package %s is not installed\n",
                                argv[i]);
@@ -417,8 +417,12 @@ print_package_info(struct razor_set *set, struct razor_package *package,
 {
        const char *summary, *description, *url, *license;
 
-       razor_package_get_details(set, package, &summary, &description,
-                                 &url, &license);
+       razor_package_get_details (set, package,
+                                  RAZOR_DETAIL_SUMMARY, &summary,
+                                  RAZOR_DETAIL_DESCRIPTION, &description,
+                                  RAZOR_DETAIL_URL, &url,
+                                  RAZOR_DETAIL_LICENSE, &license,
+                                  0);
 
        printf("Name:        %s\n", name);
        printf("Arch:        %s\n", arch);
@@ -488,7 +492,9 @@ command_query(int argc, const char *argv[])
        pi = get_query_packages(set, argc, argv);
 
        while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch)) {
+                                          RAZOR_DETAIL_NAME, &name,
+                                          RAZOR_DETAIL_VERSION, &version,
+                                          RAZOR_DETAIL_ARCH, &arch, 0)) {
                if (option_conflicts)
                        print_package_properties(set, package,
                                                 RAZOR_PROPERTY_CONFLICTS);
@@ -540,7 +546,9 @@ command_verify(int argc, const char *argv[])
        pi = get_query_packages(set, argc, argv);
 
        while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch)) {
+                                          RAZOR_DETAIL_NAME, &name,
+                                          RAZOR_DETAIL_VERSION, &version,
+                                          RAZOR_DETAIL_ARCH, &arch, 0)) {
                printf("verify %s-%s.%s - not implemented\n",
                       name, version, arch);
        }
@@ -570,7 +578,6 @@ command_erase(int argc, const char *argv[])
        struct razor_package_query *query;
        struct razor_package_iterator *pi;
        struct razor_package *package;
-       const char *name, *version, *arch;
 
        if (argc == 0) {
                printf("no packages given for erase\n");
@@ -586,8 +593,7 @@ command_erase(int argc, const char *argv[])
        add_command_line_packages(set, query, argc, argv);
 
        pi = razor_package_query_finish(query);
-       while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch))
+       while (razor_package_iterator_next(pi, &package, 0))
                razor_transaction_remove_package(trans, package);
        razor_package_iterator_destroy(pi);
 
@@ -617,7 +623,6 @@ command_install(int argc, const char *argv[])
        struct razor_transaction *trans;
        struct razor_package_iterator *pi;
        struct razor_package *package;
-       const char *name, *version, *arch;
 
        if (argc == 0) {
                printf("no packages given for install\n");
@@ -630,8 +635,7 @@ command_install(int argc, const char *argv[])
        trans = razor_transaction_create(set, upstream);
 
        pi = razor_package_iterator_create(upstream);
-       while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch))
+       while (razor_package_iterator_next(pi, &package, 0))
                razor_transaction_install_package(trans, package);
        razor_package_iterator_destroy(pi);
 
@@ -661,7 +665,6 @@ command_update(int argc, const char *argv[])
        struct razor_transaction *trans;
        struct razor_package_iterator *pi;
        struct razor_package *package;
-       const char *name, *version, *arch;
 
        if (argc == 0) {
                printf("no packages given for update\n");
@@ -674,8 +677,7 @@ command_update(int argc, const char *argv[])
        trans = razor_transaction_create(set, upstream);
 
        pi = razor_package_iterator_create(upstream);
-       while (razor_package_iterator_next(pi, &package,
-                                          &name, &version, &arch))
+       while (razor_package_iterator_next(pi, &package, 0))
                razor_transaction_update_package(trans, package);
        razor_package_iterator_destroy(pi);