1.1 --- a/razor.c Thu Jan 10 23:03:03 2008 -0500
1.2 +++ b/razor.c Thu Jan 10 23:30:51 2008 -0500
1.3 @@ -1057,50 +1057,34 @@
1.4 free(pi);
1.5 }
1.6
1.7 -struct razor_property *
1.8 -razor_set_get_property(struct razor_set *set, const char *property)
1.9 +void
1.10 +razor_set_list_property_packages(struct razor_set *set,
1.11 + const char *ref_name,
1.12 + const char *ref_version,
1.13 + enum razor_property_type ref_type)
1.14 {
1.15 - struct razor_property *p;
1.16 + struct razor_property *property;
1.17 struct razor_property_iterator *pi;
1.18 - const char *name, *version;
1.19 + struct razor_package *p, *packages;
1.20 + const char *name, *version, *pool;
1.21 enum razor_property_type type;
1.22 + unsigned long *r;
1.23 +
1.24 + if (ref_name == NULL)
1.25 + return;
1.26 +
1.27 + packages = set->packages.data;
1.28 + pool = set->string_pool.data;
1.29
1.30 pi = razor_property_iterator_create(set, NULL);
1.31 - while (razor_property_iterator_next(pi, &p, &name, &version, &type)) {
1.32 - if (strcmp(name, property) == 0)
1.33 - break;
1.34 - }
1.35 - razor_property_iterator_destroy(pi);
1.36 -
1.37 - return p;
1.38 -}
1.39 -
1.40 -
1.41 -void
1.42 -razor_set_list_property_packages(struct razor_set *set,
1.43 - const char *name,
1.44 - const char *version,
1.45 - enum razor_property_type type)
1.46 -{
1.47 - struct razor_property *property, *end;
1.48 - struct razor_package *p, *packages;
1.49 - unsigned long *r;
1.50 - char *pool;
1.51 -
1.52 - if (name == NULL)
1.53 - return;
1.54 -
1.55 - property = razor_set_get_property(set, name);
1.56 - packages = set->packages.data;
1.57 - pool = set->string_pool.data;
1.58 - end = set->properties.data + set->properties.size;
1.59 - while (property < end &&
1.60 - strcmp(name, &pool[property->name & RAZOR_ENTRY_MASK]) == 0) {
1.61 - if (version &&
1.62 - versioncmp(version, &pool[property->version]) != 0)
1.63 - goto next;
1.64 - if (type != (property->name >> 30))
1.65 - goto next;
1.66 + while (razor_property_iterator_next(pi, &property,
1.67 + &name, &version, &type)) {
1.68 + if (strcmp(ref_name, name) != 0)
1.69 + continue;
1.70 + if (ref_version && versioncmp(ref_version, version) != 0)
1.71 + continue;
1.72 + if (ref_type != type)
1.73 + continue;
1.74
1.75 if (property->packages & RAZOR_IMMEDIATE)
1.76 r = &property->packages;
1.77 @@ -1115,9 +1099,8 @@
1.78 if (*r++ & RAZOR_IMMEDIATE)
1.79 break;
1.80 }
1.81 - next:
1.82 - property++;
1.83 }
1.84 + razor_property_iterator_destroy(pi);
1.85 }
1.86
1.87 static struct razor_entry *