convert razor_package_get_details() and razor_package_iterator_next() to varargs
authorRichard Hughes <richard@hughsie.com>
Mon Jun 30 08:51:26 2008 +0100 (2008-06-30)
changeset 3029b71b537d175
parent 301 4124c37fd953
child 303 2d450078e46e
convert razor_package_get_details() and razor_package_iterator_next() to varargs

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
     1.1 --- a/librazor/iterator.c	Sun Jun 29 17:32:19 2008 +0100
     1.2 +++ b/librazor/iterator.c	Mon Jun 30 08:51:26 2008 +0100
     1.3 @@ -19,6 +19,7 @@
     1.4  
     1.5  #define _GNU_SOURCE
     1.6  
     1.7 +#include <stdarg.h>
     1.8  #include <string.h>
     1.9  #include <assert.h>
    1.10  
    1.11 @@ -105,14 +106,21 @@
    1.12  	return razor_package_iterator_create_with_index(set, index);
    1.13  }
    1.14  
    1.15 +/**
    1.16 + * razor_package_iterator_next:
    1.17 + * @pi: a %razor_package_iterator
    1.18 + * @package: a %razor_package
    1.19 + *
    1.20 + * Gets the next iteratr along with any vararg data.
    1.21 + * The vararg must be terminated with zero.
    1.22 + *
    1.23 + * Example: razor_package_iterator_next (pi, package, RAZOR_DETAIL_NAME, &name, 0);
    1.24 + **/
    1.25  RAZOR_EXPORT int
    1.26  razor_package_iterator_next(struct razor_package_iterator *pi,
    1.27 -			    struct razor_package **package,
    1.28 -			    const char **name,
    1.29 -			    const char **version,
    1.30 -			    const char **arch)
    1.31 +			    struct razor_package **package, ...)
    1.32  {
    1.33 -	char *pool;
    1.34 +	va_list args;
    1.35  	int valid;
    1.36  	struct razor_package *p, *packages;
    1.37  
    1.38 @@ -129,16 +137,17 @@
    1.39  	} else
    1.40  		valid = 0;
    1.41  
    1.42 -	if (valid) {
    1.43 -		pool = pi->set->string_pool.data;
    1.44 -		*package = p;
    1.45 -		*name = &pool[p->name];
    1.46 -		*version = &pool[p->version];
    1.47 -		*arch = &pool[p->arch];
    1.48 -	} else {
    1.49 +	if (valid == 0) {
    1.50  		*package = NULL;
    1.51 +		goto out;
    1.52  	}
    1.53  
    1.54 +	*package = p;
    1.55 +
    1.56 +	va_start(args, NULL);
    1.57 +	razor_package_get_details_varg (pi->set, p, args);
    1.58 +	va_end (args);
    1.59 +out:
    1.60  	return valid;
    1.61  }
    1.62  
    1.63 @@ -260,13 +269,12 @@
    1.64  				 struct razor_package_iterator *pi)
    1.65  {
    1.66  	struct razor_package *packages, *p;
    1.67 -	const char *name, *version, *arch;
    1.68  
    1.69  	assert (pq != NULL);
    1.70  	assert (pi != NULL);
    1.71  
    1.72  	packages = pq->set->packages.data;
    1.73 -	while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
    1.74 +	while (razor_package_iterator_next(pi, &p, 0)) {
    1.75  		pq->count += pq->vector[p - packages] ^ 1;
    1.76  		pq->vector[p - packages] = 1;
    1.77  	}
     2.1 --- a/librazor/razor-internal.h	Sun Jun 29 17:32:19 2008 +0100
     2.2 +++ b/librazor/razor-internal.h	Mon Jun 30 08:51:26 2008 +0100
     2.3 @@ -22,6 +22,9 @@
     2.4  
     2.5  #include <stdlib.h>
     2.6  #include <stdint.h>
     2.7 +#include <stdarg.h>
     2.8 +
     2.9 +#include "razor.h"
    2.10  
    2.11  /* GCC visibility */
    2.12  #if defined(__GNUC__) && __GNUC__ >= 4
    2.13 @@ -207,6 +210,11 @@
    2.14  
    2.15  /* Utility functions */
    2.16  
    2.17 +void
    2.18 +razor_package_get_details_varg(struct razor_set *set,
    2.19 +			       struct razor_package *package,
    2.20 +			       va_list args);
    2.21 +
    2.22  int razor_create_dir(const char *root, const char *path);
    2.23  int razor_write(int fd, const void *data, size_t size);
    2.24  
     3.1 --- a/librazor/razor.c	Sun Jun 29 17:32:19 2008 +0100
     3.2 +++ b/librazor/razor.c	Mon Jun 30 08:51:26 2008 +0100
     3.3 @@ -23,6 +23,7 @@
     3.4  #include <stddef.h>
     3.5  #include <stdint.h>
     3.6  #include <stdio.h>
     3.7 +#include <stdarg.h>
     3.8  #include <string.h>
     3.9  #include <sys/types.h>
    3.10  #include <sys/stat.h>
    3.11 @@ -387,13 +388,13 @@
    3.12  {
    3.13  	struct razor_package_iterator *pi;
    3.14  	struct razor_package *p;
    3.15 -	const char *name, *version, *arch;
    3.16 +	const char *name;
    3.17  
    3.18  	assert (set != NULL);
    3.19  	assert (package != NULL);
    3.20  
    3.21  	pi = razor_package_iterator_create(set);
    3.22 -	while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
    3.23 +	while (razor_package_iterator_next(pi, &p, RAZOR_DETAIL_NAME, &name, 0)) {
    3.24  		if (strcmp(package, name) == 0)
    3.25  			break;
    3.26  	}
    3.27 @@ -402,25 +403,94 @@
    3.28  	return p;
    3.29  }
    3.30  
    3.31 +static const char *
    3.32 +razor_package_get_details_type(struct razor_set *set,
    3.33 +			       struct razor_package *package,
    3.34 +			       enum razor_detail_type type)
    3.35 +{
    3.36 +	const char *pool;
    3.37 +
    3.38 +	switch (type) {
    3.39 +	case RAZOR_DETAIL_NAME:
    3.40 +		pool = set->string_pool.data;
    3.41 +		return &pool[package->name];
    3.42 +
    3.43 +	case RAZOR_DETAIL_VERSION:
    3.44 +		pool = set->string_pool.data;
    3.45 +		return &pool[package->version];
    3.46 +
    3.47 +	case RAZOR_DETAIL_ARCH:
    3.48 +		pool = set->string_pool.data;
    3.49 +		return &pool[package->arch];
    3.50 +
    3.51 +	case RAZOR_DETAIL_SUMMARY:
    3.52 +		pool = set->details_string_pool.data;
    3.53 +		return &pool[package->summary];
    3.54 +
    3.55 +	case RAZOR_DETAIL_DESCRIPTION:
    3.56 +		pool = set->details_string_pool.data;
    3.57 +		return &pool[package->description];
    3.58 +
    3.59 +	case RAZOR_DETAIL_URL:
    3.60 +		pool = set->details_string_pool.data;
    3.61 +		return &pool[package->url];
    3.62 +
    3.63 +	case RAZOR_DETAIL_LICENSE:
    3.64 +		pool = set->details_string_pool.data;
    3.65 +		return &pool[package->license];
    3.66 +
    3.67 +	default:
    3.68 +		fprintf(stderr, "type %u not found\n", type);
    3.69 +		return NULL;
    3.70 +	}
    3.71 +}
    3.72 +
    3.73 +/**
    3.74 + * razor_package_get_details_varg:
    3.75 + * @set: a %razor_set
    3.76 + * @package: a %razor_package
    3.77 + * @args: a va_list of arguments to set
    3.78 + **/
    3.79 +void
    3.80 +razor_package_get_details_varg(struct razor_set *set,
    3.81 +			       struct razor_package *package,
    3.82 +			       va_list args)
    3.83 +{
    3.84 +	int i;
    3.85 +	enum razor_detail_type type;
    3.86 +	const char **data;
    3.87 +
    3.88 +	for (i = 0;; i += 2) {
    3.89 +		type = va_arg(args, enum razor_detail_type);
    3.90 +		if (type == 0)
    3.91 +			break;
    3.92 +		data = va_arg(args, const char **);
    3.93 +		*data = razor_package_get_details_type(set, package, type);
    3.94 +	}
    3.95 +
    3.96 +}
    3.97 +
    3.98 +/**
    3.99 + * razor_package_get_details:
   3.100 + * @set: a %razor_set
   3.101 + * @package: a %razor_package
   3.102 + *
   3.103 + * Gets details about a package using a varg interface
   3.104 + * The vararg must be terminated with zero.
   3.105 + *
   3.106 + * Example: razor_package_get_details (set, package, RAZOR_DETAIL_URL, &url, 0);
   3.107 + **/
   3.108  RAZOR_EXPORT void
   3.109 -razor_package_get_details(struct razor_set *set,
   3.110 -			  struct razor_package *package,
   3.111 -			  const char **summary, const char **description,
   3.112 -			  const char **url, const char **license)
   3.113 +razor_package_get_details(struct razor_set *set, struct razor_package *package, ...)
   3.114  {
   3.115 -	const char *pool = set->details_string_pool.data;
   3.116 +	va_list args;
   3.117  
   3.118  	assert (set != NULL);
   3.119  	assert (package != NULL);
   3.120  
   3.121 -	if (summary != NULL)
   3.122 -		*summary = &pool[package->summary];
   3.123 -	if (description != NULL)
   3.124 -		*description = &pool[package->description];
   3.125 -	if (url != NULL)
   3.126 -		*url = &pool[package->url];
   3.127 -	if (license != NULL)
   3.128 -		*license = &pool[package->license];
   3.129 +	va_start(args, NULL);
   3.130 +	razor_package_get_details_varg (set, package, args);
   3.131 +	va_end (args);
   3.132  }
   3.133  
   3.134  RAZOR_EXPORT const char *
   3.135 @@ -647,8 +717,16 @@
   3.136  	pi1 = razor_package_iterator_create(set);
   3.137  	pi2 = razor_package_iterator_create(upstream);
   3.138  
   3.139 -	razor_package_iterator_next(pi1, &p1, &name1, &version1, &arch1);
   3.140 -	razor_package_iterator_next(pi2, &p2, &name2, &version2, &arch2);
   3.141 +	razor_package_iterator_next(pi1, &p1,
   3.142 +				    RAZOR_DETAIL_NAME, &name1,
   3.143 +				    RAZOR_DETAIL_VERSION, &version1,
   3.144 +				    RAZOR_DETAIL_ARCH, &arch1,
   3.145 +				    0);
   3.146 +	razor_package_iterator_next(pi2, &p2,
   3.147 +				    RAZOR_DETAIL_NAME, &name2,
   3.148 +				    RAZOR_DETAIL_VERSION, &version2,
   3.149 +				    RAZOR_DETAIL_ARCH, &arch2,
   3.150 +				    0);
   3.151  
   3.152  	while (p1 || p2) {
   3.153  		if (p1 && p2) {
   3.154 @@ -668,10 +746,16 @@
   3.155  
   3.156  		if (p1 != NULL && res <= 0)
   3.157  			razor_package_iterator_next(pi1, &p1,
   3.158 -						    &name1, &version1, &arch1);
   3.159 +						    RAZOR_DETAIL_NAME, &name1,
   3.160 +						    RAZOR_DETAIL_VERSION, &version1,
   3.161 +						    RAZOR_DETAIL_ARCH, &arch1,
   3.162 +						    0);
   3.163  		if (p2 != NULL && res >= 0)
   3.164  			razor_package_iterator_next(pi2, &p2,
   3.165 -						    &name2, &version2, &arch2);
   3.166 +						    RAZOR_DETAIL_NAME, &name2,
   3.167 +						    RAZOR_DETAIL_VERSION, &version2,
   3.168 +						    RAZOR_DETAIL_ARCH, &arch2,
   3.169 +						    0);
   3.170  	}
   3.171  
   3.172  	razor_package_iterator_destroy(pi1);
     4.1 --- a/librazor/razor.h	Sun Jun 29 17:32:19 2008 +0100
     4.2 +++ b/librazor/razor.h	Mon Jun 30 08:51:26 2008 +0100
     4.3 @@ -28,6 +28,16 @@
     4.4  	RAZOR_REPO_FILE_FILES
     4.5  };
     4.6  
     4.7 +enum razor_detail_type {
     4.8 +	RAZOR_DETAIL_NAME = 1, /* 0 is the marker for the vararg */
     4.9 +	RAZOR_DETAIL_VERSION,
    4.10 +	RAZOR_DETAIL_ARCH,
    4.11 +	RAZOR_DETAIL_SUMMARY,
    4.12 +	RAZOR_DETAIL_DESCRIPTION,
    4.13 +	RAZOR_DETAIL_URL,
    4.14 +	RAZOR_DETAIL_LICENSE
    4.15 +};
    4.16 +
    4.17  enum razor_property_flags {
    4.18  	RAZOR_PROPERTY_LESS		= 1 << 0,
    4.19  	RAZOR_PROPERTY_GREATER		= 1 << 1,
    4.20 @@ -84,9 +94,7 @@
    4.21  razor_set_get_package(struct razor_set *set, const char *package);
    4.22  
    4.23  void
    4.24 -razor_package_get_details(struct razor_set *set, struct razor_package *package,
    4.25 -			  const char **summary, const char **description,
    4.26 -			  const char **url, const char **license);
    4.27 +razor_package_get_details(struct razor_set *set, struct razor_package *package, ...);
    4.28  
    4.29  
    4.30  /**
    4.31 @@ -136,10 +144,7 @@
    4.32  				       const char *filename);
    4.33  
    4.34  int razor_package_iterator_next(struct razor_package_iterator *pi,
    4.35 -				struct razor_package **package,
    4.36 -				const char **name,
    4.37 -				const char **version,
    4.38 -				const char **arch);
    4.39 +				struct razor_package **package, ...);
    4.40  void razor_package_iterator_destroy(struct razor_package_iterator *pi);
    4.41  
    4.42  struct razor_package_query *
     5.1 --- a/librazor/transaction.c	Sun Jun 29 17:32:19 2008 +0100
     5.2 +++ b/librazor/transaction.c	Mon Jun 30 08:51:26 2008 +0100
     5.3 @@ -294,7 +294,7 @@
     5.4  	struct razor_package *pkg, *pkgs;
     5.5  	struct razor_package_iterator pkg_iter;
     5.6  	struct razor_set *set;
     5.7 -	const char *n, *v, *a;
     5.8 +	const char *n, *v;
     5.9  	uint32_t type;
    5.10  
    5.11  	if (ppi->present == trans->system.properties)
    5.12 @@ -316,8 +316,9 @@
    5.13  			continue;
    5.14  
    5.15  		razor_package_iterator_init_for_property(&pkg_iter, set, p);
    5.16 -		while (razor_package_iterator_next(&pkg_iter,
    5.17 -						   &pkg, &n, &v, &a)) {
    5.18 +		while (razor_package_iterator_next(&pkg_iter, &pkg,
    5.19 +						   RAZOR_DETAIL_NAME, &n,
    5.20 +						   RAZOR_DETAIL_VERSION, &v, 0)) {
    5.21  			fprintf(stderr, "removing %s-%s\n", n, v);
    5.22  			razor_transaction_remove_package(trans, pkg);
    5.23  		}
    5.24 @@ -335,7 +336,7 @@
    5.25  	struct razor_package *pkg, *pkgs;
    5.26  	struct razor_package_iterator pkg_iter;
    5.27  	struct razor_set *set;
    5.28 -	const char *name, *version, *arch;
    5.29 +	const char *name, *version;
    5.30  	uint32_t *flags, type;
    5.31  
    5.32  	if (ppi->present == trans->system.properties) {
    5.33 @@ -362,7 +363,8 @@
    5.34  
    5.35  		razor_package_iterator_init_for_property(&pkg_iter, set, p);
    5.36  		while (razor_package_iterator_next(&pkg_iter, &pkg,
    5.37 -						   &name, &version, &arch)) {
    5.38 +						   RAZOR_DETAIL_NAME, &name,
    5.39 +						   RAZOR_DETAIL_VERSION, &version, 0)) {
    5.40  
    5.41  			fprintf(stderr, "flagging %s-%s for providing %s matching %s %s\n",
    5.42  				name, version,
    5.43 @@ -511,7 +513,7 @@
    5.44  	struct razor_property *sp;
    5.45  	struct prop_iter spi;
    5.46  	struct razor_package_iterator pkg_iter;
    5.47 -	const char *name, *version, *arch;
    5.48 +	const char *name;
    5.49  
    5.50  	spkgs = trans->system.set->packages.data;
    5.51  	prop_iter_init(&spi, &trans->system);
    5.52 @@ -524,7 +526,7 @@
    5.53  							 trans->system.set,
    5.54  							 sp);
    5.55  		while (razor_package_iterator_next(&pkg_iter, &pkg,
    5.56 -						   &name, &version, &arch)) {
    5.57 +						   RAZOR_DETAIL_NAME, &name, 0)) {
    5.58  			fprintf(stderr, "updating %s because %s %s %s "
    5.59  				"isn't satisfied\n",
    5.60  				name, spi.pool + sp->name,
    5.61 @@ -556,7 +558,7 @@
    5.62  	struct razor_property *up, *sp;
    5.63  	struct prop_iter spi, upi;
    5.64  	struct razor_package_iterator pkg_iter;
    5.65 -	const char *name, *version, *arch;
    5.66 +	const char *name, *version;
    5.67  
    5.68  	spkgs = trans->system.set->packages.data;
    5.69  	prop_iter_init(&spi, &trans->system);
    5.70 @@ -575,7 +577,8 @@
    5.71  							 trans->system.set,
    5.72  							 sp);
    5.73  		while (razor_package_iterator_next(&pkg_iter, &pkg,
    5.74 -						   &name, &version, &arch)) {
    5.75 +						   RAZOR_DETAIL_NAME, &name,
    5.76 +						   RAZOR_DETAIL_VERSION, &version, 0)) {
    5.77  			fprintf(stderr, "updating %s %s because it "
    5.78  				"conflicts with %s\n",
    5.79  				name, version, spi.pool + sp->name);
    5.80 @@ -657,13 +660,15 @@
    5.81   	struct razor_package_iterator *pi;
    5.82   	struct razor_package *p, *pkg, *spkgs;
    5.83  	struct prop_iter ppi;
    5.84 -	const char *name, *version, *arch;
    5.85 +	const char *name, *version;
    5.86  
    5.87  	spkgs = trans->system.set->packages.data;
    5.88  	pi = razor_package_iterator_create(trans->system.set);
    5.89  	prop_iter_init(&ppi, &trans->upstream);
    5.90  
    5.91 -	while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
    5.92 +	while (razor_package_iterator_next(pi, &p,
    5.93 +					   RAZOR_DETAIL_NAME, &name,
    5.94 +					   RAZOR_DETAIL_VERSION, &version, 0)) {
    5.95  		if (!(trans->system.packages[p - spkgs] & TRANS_PACKAGE_UPDATE))
    5.96  			continue;
    5.97  
    5.98 @@ -692,13 +697,15 @@
    5.99   	struct razor_package_iterator *pi;
   5.100   	struct razor_package *p, *upkgs;
   5.101  	struct prop_iter spi;
   5.102 -	const char *name, *version, *arch;
   5.103 +	const char *name, *version;
   5.104  
   5.105  	upkgs = trans->upstream.set->packages.data;
   5.106  	pi = razor_package_iterator_create(trans->upstream.set);
   5.107  	prop_iter_init(&spi, &trans->system);
   5.108  
   5.109 -	while (razor_package_iterator_next(pi, &p, &name, &version, &arch)) {
   5.110 +	while (razor_package_iterator_next(pi, &p,
   5.111 +					   RAZOR_DETAIL_NAME, &name,
   5.112 +					   RAZOR_DETAIL_VERSION, &version, 0)) {
   5.113  		if (!(trans->upstream.packages[p - upkgs] & TRANS_PACKAGE_UPDATE))
   5.114  			continue;
   5.115  
   5.116 @@ -745,14 +752,18 @@
   5.117  	if (pool[rp->version] == '\0') {
   5.118  		razor_package_iterator_init_for_property(&pi, set, rp);
   5.119  		while (razor_package_iterator_next(&pi, &pkg,
   5.120 -						   &name, &version, &arch))
   5.121 +						   RAZOR_DETAIL_NAME, &name,
   5.122 +						   RAZOR_DETAIL_VERSION, &version,
   5.123 +						   RAZOR_DETAIL_ARCH, &arch, 0))
   5.124  			fprintf(stderr, "%s is needed by %s-%s.%s\n",
   5.125  				&pool[rp->name],
   5.126  				name, version, arch);
   5.127  	} else {
   5.128  		razor_package_iterator_init_for_property(&pi, set, rp);
   5.129  		while (razor_package_iterator_next(&pi, &pkg,
   5.130 -						   &name, &version, &arch))
   5.131 +						   RAZOR_DETAIL_NAME, &name,
   5.132 +						   RAZOR_DETAIL_VERSION, &version,
   5.133 +						   RAZOR_DETAIL_ARCH, &arch, 0))
   5.134  			fprintf(stderr, "%s %s %s is needed by %s-%s.%s\n",
   5.135  				&pool[rp->name],
   5.136  				razor_property_relation_to_string(rp),
     6.1 --- a/src/main.c	Sun Jun 29 17:32:19 2008 +0100
     6.2 +++ b/src/main.c	Mon Jun 30 08:51:26 2008 +0100
     6.3 @@ -47,7 +47,7 @@
     6.4  	struct razor_package_query *query;
     6.5  	struct razor_package_iterator *iter;
     6.6  	struct razor_package *package;
     6.7 -	const char *name, *version, *arch, *pattern;
     6.8 +	const char *name, *pattern;
     6.9  	int i, count;
    6.10  
    6.11  	if (argc == 0)
    6.12 @@ -59,8 +59,7 @@
    6.13  		iter = razor_package_iterator_create(set);
    6.14  		pattern = argv[i];
    6.15  		count = 0;
    6.16 -		while (razor_package_iterator_next(iter, &package,
    6.17 -						   &name, &version, &arch)) {
    6.18 +		while (razor_package_iterator_next(iter, &package, RAZOR_DETAIL_NAME, &name, 0)) {
    6.19  			if (fnmatch(pattern, name, 0) != 0)
    6.20  				continue;
    6.21  
    6.22 @@ -86,7 +85,9 @@
    6.23  	const char *name, *version, *arch;
    6.24  
    6.25  	while (razor_package_iterator_next(iter, &package,
    6.26 -					   &name, &version, &arch)) {
    6.27 +					   RAZOR_DETAIL_NAME, &name,
    6.28 +					   RAZOR_DETAIL_VERSION, &version,
    6.29 +					   RAZOR_DETAIL_ARCH, &arch, 0)) {
    6.30  		if (flags & LIST_PACKAGES_ONLY_NAMES)
    6.31  			printf("%s\n", name);
    6.32  		else
    6.33 @@ -425,12 +426,12 @@
    6.34  {
    6.35  	struct razor_package_iterator *pi;
    6.36  	struct razor_package *package;
    6.37 -	const char *name, *version, *arch;
    6.38 +	const char *name;
    6.39  	int matches = 0;
    6.40  
    6.41  	pi = razor_package_iterator_create(set);
    6.42  	while (razor_package_iterator_next(pi, &package,
    6.43 -					   &name, &version, &arch)) {
    6.44 +					   RAZOR_DETAIL_NAME, &name, 0)) {
    6.45  		if (pattern && fnmatch(pattern, name, 0) == 0) {
    6.46  			razor_transaction_update_package(trans, package);
    6.47  			matches++;
    6.48 @@ -447,12 +448,11 @@
    6.49  {
    6.50  	struct razor_package_iterator *pi;
    6.51  	struct razor_package *package;
    6.52 -	const char *name, *version, *arch;
    6.53 +	const char *name;
    6.54  	int matches = 0;
    6.55  
    6.56  	pi = razor_package_iterator_create(set);
    6.57 -	while (razor_package_iterator_next(pi, &package,
    6.58 -					   &name, &version, &arch)) {
    6.59 +	while (razor_package_iterator_next(pi, &package, RAZOR_DETAIL_NAME, &name, 0)) {
    6.60  		if (pattern && fnmatch(pattern, name, 0) == 0) {
    6.61  			razor_transaction_remove_package(trans, package);
    6.62  			matches++;
    6.63 @@ -660,7 +660,9 @@
    6.64  	pi = razor_set_create_install_iterator(system, next);
    6.65  	errors = 0;
    6.66  	while (razor_package_iterator_next(pi, &package,
    6.67 -					   &name, &version, &arch)) {
    6.68 +					   RAZOR_DETAIL_NAME, &name,
    6.69 +					   RAZOR_DETAIL_VERSION, &version,
    6.70 +					   RAZOR_DETAIL_ARCH, &arch, 0)) {
    6.71  		snprintf(url, sizeof url,
    6.72  			 "%s/Packages/%s",
    6.73  			 yum_url, rpm_filename(name, version, arch));
    6.74 @@ -690,7 +692,9 @@
    6.75  
    6.76  	pi = razor_set_create_install_iterator(system, next);
    6.77  	while (razor_package_iterator_next(pi, &package,
    6.78 -					   &name, &version, &arch)) {
    6.79 +					   RAZOR_DETAIL_NAME, &name,
    6.80 +					   RAZOR_DETAIL_VERSION, &version,
    6.81 +					   RAZOR_DETAIL_ARCH, &arch, 0)) {
    6.82  		printf("install %s-%s\n", name, version);
    6.83  
    6.84  		snprintf(file, sizeof file,
    6.85 @@ -796,7 +800,9 @@
    6.86  	set = razor_set_open(rawhide_repo_filename);
    6.87  	pi = razor_package_iterator_create(set);
    6.88  	while (razor_package_iterator_next(pi, &package,
    6.89 -					   &name, &version, &arch)) {
    6.90 +					   RAZOR_DETAIL_NAME, &name,
    6.91 +					   RAZOR_DETAIL_VERSION, &version,
    6.92 +					   RAZOR_DETAIL_ARCH, &arch, 0)) {
    6.93  		if (pattern && fnmatch(pattern, name, 0) != 0)
    6.94  			continue;
    6.95  
    6.96 @@ -837,12 +843,18 @@
    6.97  		return 1;
    6.98  	pi = razor_package_iterator_create(set);
    6.99  	while (razor_package_iterator_next(pi, &package,
   6.100 -					   &name, &version, &arch)) {
   6.101 +					   RAZOR_DETAIL_NAME, &name,
   6.102 +					   RAZOR_DETAIL_VERSION, &version,
   6.103 +					   RAZOR_DETAIL_ARCH, &arch, 0)) {
   6.104  		if (pattern && fnmatch(pattern, name, 0) != 0)
   6.105  			continue;
   6.106  
   6.107 -		razor_package_get_details (set, package, &summary, &description,
   6.108 -					   &url, &license);
   6.109 +		razor_package_get_details (set, package,
   6.110 +					   RAZOR_DETAIL_SUMMARY, &summary,
   6.111 +					   RAZOR_DETAIL_DESCRIPTION, &description,
   6.112 +					   RAZOR_DETAIL_URL, &url,
   6.113 +					   RAZOR_DETAIL_LICENSE, &license,
   6.114 +					   0);
   6.115  
   6.116  		printf ("Name:        %s\n", name);
   6.117  		printf ("Arch:        %s\n", arch);
     7.1 --- a/src/rpm.c	Sun Jun 29 17:32:19 2008 +0100
     7.2 +++ b/src/rpm.c	Mon Jun 30 08:51:26 2008 +0100
     7.3 @@ -303,7 +303,7 @@
     7.4  {
     7.5  	struct razor_package *package;
     7.6  	struct razor_package_iterator *pi;
     7.7 -	const char *name, *version, *arch;
     7.8 +	const char *name;
     7.9  	int i, cmp, errors;
    7.10  
    7.11  	qsort(argv, argc, sizeof(*argv), strcmpp);
    7.12 @@ -313,7 +313,7 @@
    7.13  	pi = razor_package_iterator_create(set);
    7.14  
    7.15  	while (razor_package_iterator_next(pi, &package,
    7.16 -					   &name, &version, &arch)) {
    7.17 +					   RAZOR_DETAIL_NAME, &name, 0)) {
    7.18  		while (cmp = strcmp(argv[i], name), cmp < 0 && i < argc) {
    7.19  			fprintf(stderr, "error: package %s is not installed\n",
    7.20  				argv[i]);
    7.21 @@ -417,8 +417,12 @@
    7.22  {
    7.23  	const char *summary, *description, *url, *license;
    7.24  
    7.25 -	razor_package_get_details(set, package, &summary, &description,
    7.26 -				  &url, &license);
    7.27 +	razor_package_get_details (set, package,
    7.28 +				   RAZOR_DETAIL_SUMMARY, &summary,
    7.29 +				   RAZOR_DETAIL_DESCRIPTION, &description,
    7.30 +				   RAZOR_DETAIL_URL, &url,
    7.31 +				   RAZOR_DETAIL_LICENSE, &license,
    7.32 +				   0);
    7.33  
    7.34  	printf("Name:        %s\n", name);
    7.35  	printf("Arch:        %s\n", arch);
    7.36 @@ -488,7 +492,9 @@
    7.37  	pi = get_query_packages(set, argc, argv);
    7.38  
    7.39  	while (razor_package_iterator_next(pi, &package,
    7.40 -					   &name, &version, &arch)) {
    7.41 +					   RAZOR_DETAIL_NAME, &name,
    7.42 +					   RAZOR_DETAIL_VERSION, &version,
    7.43 +					   RAZOR_DETAIL_ARCH, &arch, 0)) {
    7.44  		if (option_conflicts)
    7.45  			print_package_properties(set, package,
    7.46  						 RAZOR_PROPERTY_CONFLICTS);
    7.47 @@ -540,7 +546,9 @@
    7.48  	pi = get_query_packages(set, argc, argv);
    7.49  
    7.50  	while (razor_package_iterator_next(pi, &package,
    7.51 -					   &name, &version, &arch)) {
    7.52 +					   RAZOR_DETAIL_NAME, &name,
    7.53 +					   RAZOR_DETAIL_VERSION, &version,
    7.54 +					   RAZOR_DETAIL_ARCH, &arch, 0)) {
    7.55  		printf("verify %s-%s.%s - not implemented\n",
    7.56  		       name, version, arch);
    7.57  	}
    7.58 @@ -570,7 +578,6 @@
    7.59  	struct razor_package_query *query;
    7.60  	struct razor_package_iterator *pi;
    7.61  	struct razor_package *package;
    7.62 -	const char *name, *version, *arch;
    7.63  
    7.64  	if (argc == 0) {
    7.65  		printf("no packages given for erase\n");
    7.66 @@ -586,8 +593,7 @@
    7.67  	add_command_line_packages(set, query, argc, argv);
    7.68  
    7.69  	pi = razor_package_query_finish(query);
    7.70 -	while (razor_package_iterator_next(pi, &package,
    7.71 -					   &name, &version, &arch))
    7.72 +	while (razor_package_iterator_next(pi, &package, 0))
    7.73  		razor_transaction_remove_package(trans, package);
    7.74  	razor_package_iterator_destroy(pi);
    7.75  
    7.76 @@ -617,7 +623,6 @@
    7.77  	struct razor_transaction *trans;
    7.78  	struct razor_package_iterator *pi;
    7.79  	struct razor_package *package;
    7.80 -	const char *name, *version, *arch;
    7.81  
    7.82  	if (argc == 0) {
    7.83  		printf("no packages given for install\n");
    7.84 @@ -630,8 +635,7 @@
    7.85  	trans = razor_transaction_create(set, upstream);
    7.86  
    7.87  	pi = razor_package_iterator_create(upstream);
    7.88 -	while (razor_package_iterator_next(pi, &package,
    7.89 -					   &name, &version, &arch))
    7.90 +	while (razor_package_iterator_next(pi, &package, 0))
    7.91  		razor_transaction_install_package(trans, package);
    7.92  	razor_package_iterator_destroy(pi);
    7.93  
    7.94 @@ -661,7 +665,6 @@
    7.95  	struct razor_transaction *trans;
    7.96  	struct razor_package_iterator *pi;
    7.97  	struct razor_package *package;
    7.98 -	const char *name, *version, *arch;
    7.99  
   7.100  	if (argc == 0) {
   7.101  		printf("no packages given for update\n");
   7.102 @@ -674,8 +677,7 @@
   7.103  	trans = razor_transaction_create(set, upstream);
   7.104  
   7.105  	pi = razor_package_iterator_create(upstream);
   7.106 -	while (razor_package_iterator_next(pi, &package,
   7.107 -					   &name, &version, &arch))
   7.108 +	while (razor_package_iterator_next(pi, &package, 0))
   7.109  		razor_transaction_update_package(trans, package);
   7.110  	razor_package_iterator_destroy(pi);
   7.111