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 }