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,