# HG changeset patch # User Kristian H?gsberg # Date 1200023451 18000 # Node ID 41bf485e61548c48ad9403f4471f62910792161a # Parent 9feff82f2d011018e5485c6733638906f76436b4 Implement razor_set_get_package() using the package iterator. Drop bsearch and qsort with data TODO items. diff -r 9feff82f2d01 -r 41bf485e6154 TODO --- a/TODO Thu Jan 10 22:44:41 2008 -0500 +++ b/TODO Thu Jan 10 22:50:51 2008 -0500 @@ -56,9 +56,6 @@ - transactions, proper recovery, make sure we don't poop our package database (no more rm /var/lib/rpm/__cache*). -- rewrite qsort and bsearch that doesn't require global context var - and can output a map describing the permutaion. - - use hash table for package and property lists so we only store unique lists (like for string pool). diff -r 9feff82f2d01 -r 41bf485e6154 razor.c --- a/razor.c Thu Jan 10 22:44:41 2008 -0500 +++ b/razor.c Thu Jan 10 22:50:51 2008 -0500 @@ -975,26 +975,21 @@ free(pi); } -struct razor_set *bsearch_set; - -static int -compare_package_name(const void *key, const void *data) -{ - const struct razor_package *p = data; - char *pool; - - pool = bsearch_set->string_pool.data; - - return strcmp(key, &pool[p->name]); -} - struct razor_package * razor_set_get_package(struct razor_set *set, const char *package) { - bsearch_set = set; - return bsearch(package, set->packages.data, - set->packages.size / sizeof(struct razor_package), - sizeof(struct razor_package), compare_package_name); + struct razor_package_iterator *pi; + struct razor_package *p; + const char *name, *version; + + pi = razor_package_iterator_create(set); + while (razor_package_iterator_next(pi, &p, &name, &version)) { + if (strcmp(package, name) == 0) + break; + } + razor_package_iterator_destroy(pi); + + return p; } struct razor_property_iterator {