Implement razor_set_get_package() using the package iterator.
Drop bsearch and qsort with data TODO items.
1.1 --- a/TODO Thu Jan 10 22:44:41 2008 -0500
1.2 +++ b/TODO Thu Jan 10 22:50:51 2008 -0500
1.3 @@ -56,9 +56,6 @@
1.4 - transactions, proper recovery, make sure we don't poop our package
1.5 database (no more rm /var/lib/rpm/__cache*).
1.6
1.7 -- rewrite qsort and bsearch that doesn't require global context var
1.8 - and can output a map describing the permutaion.
1.9 -
1.10 - use hash table for package and property lists so we only store
1.11 unique lists (like for string pool).
1.12
2.1 --- a/razor.c Thu Jan 10 22:44:41 2008 -0500
2.2 +++ b/razor.c Thu Jan 10 22:50:51 2008 -0500
2.3 @@ -975,26 +975,21 @@
2.4 free(pi);
2.5 }
2.6
2.7 -struct razor_set *bsearch_set;
2.8 -
2.9 -static int
2.10 -compare_package_name(const void *key, const void *data)
2.11 -{
2.12 - const struct razor_package *p = data;
2.13 - char *pool;
2.14 -
2.15 - pool = bsearch_set->string_pool.data;
2.16 -
2.17 - return strcmp(key, &pool[p->name]);
2.18 -}
2.19 -
2.20 struct razor_package *
2.21 razor_set_get_package(struct razor_set *set, const char *package)
2.22 {
2.23 - bsearch_set = set;
2.24 - return bsearch(package, set->packages.data,
2.25 - set->packages.size / sizeof(struct razor_package),
2.26 - sizeof(struct razor_package), compare_package_name);
2.27 + struct razor_package_iterator *pi;
2.28 + struct razor_package *p;
2.29 + const char *name, *version;
2.30 +
2.31 + pi = razor_package_iterator_create(set);
2.32 + while (razor_package_iterator_next(pi, &p, &name, &version)) {
2.33 + if (strcmp(package, name) == 0)
2.34 + break;
2.35 + }
2.36 + razor_package_iterator_destroy(pi);
2.37 +
2.38 + return p;
2.39 }
2.40
2.41 struct razor_property_iterator {