Use property iterator for razor_set_get_property().
authorKristian H?gsberg <krh@redhat.com>
Thu Jan 10 22:44:41 2008 -0500 (2008-01-10)
changeset 969feff82f2d01
parent 95 c47cbb91394c
child 97 41bf485e6154
Use property iterator for razor_set_get_property().
razor.c
     1.1 --- a/razor.c	Thu Jan 10 22:07:07 2008 -0500
     1.2 +++ b/razor.c	Thu Jan 10 22:44:41 2008 -0500
     1.3 @@ -997,36 +997,6 @@
     1.4  		       sizeof(struct razor_package), compare_package_name);
     1.5  }
     1.6  
     1.7 -static int
     1.8 -compare_property_name(const void *key, const void *data)
     1.9 -{
    1.10 -	const struct razor_property *p = data;
    1.11 -	char *pool;
    1.12 -
    1.13 -	pool = bsearch_set->string_pool.data;
    1.14 -
    1.15 -	return strcmp(key, &pool[p->name & RAZOR_ENTRY_MASK]);
    1.16 -}
    1.17 -
    1.18 -struct razor_property *
    1.19 -razor_set_get_property(struct razor_set *set, const char *property)
    1.20 -{
    1.21 -	struct razor_property *p, *start;
    1.22 -
    1.23 -	bsearch_set = set;
    1.24 -	p = bsearch(property, set->properties.data,
    1.25 -		    set->properties.size / sizeof(struct razor_property),
    1.26 -		    sizeof(struct razor_property), compare_property_name);
    1.27 -
    1.28 -	start = set->properties.data;
    1.29 -	while (p > start &&
    1.30 -	       ((p - 1)->name & RAZOR_ENTRY_MASK) ==
    1.31 -	       (p->name & RAZOR_ENTRY_MASK))
    1.32 -		p--;
    1.33 -
    1.34 -	return p;
    1.35 -}
    1.36 -
    1.37  struct razor_property_iterator {
    1.38  	struct razor_set *set;
    1.39  	struct razor_property *property, *end;
    1.40 @@ -1071,18 +1041,20 @@
    1.41  		p = &properties[*pi->index & RAZOR_ENTRY_MASK];
    1.42  		valid = !pi->last;
    1.43  		pi->last = (*pi->index++ & RAZOR_IMMEDIATE) != 0;
    1.44 -		if (!valid)
    1.45 -			return valid;
    1.46  	} else {
    1.47  		p = pi->property++;
    1.48  		valid = p < pi->end;
    1.49  	}			
    1.50  
    1.51 -	pool = pi->set->string_pool.data;
    1.52 -	*property = p;
    1.53 -	*name = &pool[p->name & RAZOR_ENTRY_MASK];
    1.54 -	*version = &pool[p->version];
    1.55 -	*type = p->name >> 30;
    1.56 +	if (valid) {
    1.57 +		pool = pi->set->string_pool.data;
    1.58 +		*property = p;
    1.59 +		*name = &pool[p->name & RAZOR_ENTRY_MASK];
    1.60 +		*version = &pool[p->version];
    1.61 +		*type = p->name >> 30;
    1.62 +	} else {
    1.63 +		*property = NULL;
    1.64 +	}
    1.65  
    1.66  	return valid;
    1.67  }
    1.68 @@ -1093,6 +1065,25 @@
    1.69  	free(pi);
    1.70  }
    1.71  
    1.72 +struct razor_property *
    1.73 +razor_set_get_property(struct razor_set *set, const char *property)
    1.74 +{
    1.75 +	struct razor_property *p;
    1.76 +	struct razor_property_iterator *pi;
    1.77 +	const char *name, *version;
    1.78 +	enum razor_property_type type;
    1.79 +
    1.80 +	pi = razor_property_iterator_create(set, NULL);
    1.81 +	while (razor_property_iterator_next(pi, &p, &name, &version, &type)) {
    1.82 +		if (strcmp(name, property) == 0)
    1.83 +			break;
    1.84 +	}
    1.85 +	razor_property_iterator_destroy(pi);
    1.86 +
    1.87 +	return p;
    1.88 +}
    1.89 +
    1.90 +
    1.91  void
    1.92  razor_set_list_property_packages(struct razor_set *set,
    1.93  				 const char *name,