Implement razor_set_get_package() using the package iterator.
authorKristian H?gsberg <krh@redhat.com>
Thu Jan 10 22:50:51 2008 -0500 (2008-01-10)
changeset 9741bf485e6154
parent 96 9feff82f2d01
child 98 ec850cbd6935
Implement razor_set_get_package() using the package iterator.

Drop bsearch and qsort with data TODO items.
TODO
razor.c
     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 {