1.1 --- a/razor.c Thu Jan 17 23:36:12 2008 -0500
1.2 +++ b/razor.c Mon Jan 21 23:02:47 2008 -0500
1.3 @@ -1784,39 +1784,37 @@
1.4 razor_set_diff(struct razor_set *set, struct razor_set *upstream,
1.5 razor_package_callback_t callback, void *data)
1.6 {
1.7 - struct razor_package *p, *pend, *u, *uend;
1.8 - char *ppool, *upool;
1.9 + struct razor_package_iterator *pi1, *pi2;
1.10 + struct razor_package *p1, *p2;
1.11 + const char *name1, *name2, *version1, *version2;
1.12 int res = 0;
1.13
1.14 - p = set->packages.data;
1.15 - pend = set->packages.data + set->packages.size;
1.16 - ppool = set->string_pool.data;
1.17 + pi1 = razor_package_iterator_create(set);
1.18 + pi2 = razor_package_iterator_create(upstream);
1.19
1.20 - u = upstream->packages.data;
1.21 - uend = upstream->packages.data + upstream->packages.size;
1.22 - upool = upstream->string_pool.data;
1.23 + razor_package_iterator_next(pi1, &p1, &name1, &version1);
1.24 + razor_package_iterator_next(pi2, &p2, &name2, &version2);
1.25
1.26 - while (p < pend || u < uend) {
1.27 - if (p < pend && u < uend) {
1.28 - res = strcmp(&ppool[p->name], &upool[u->name]);
1.29 + while (p1 || p2) {
1.30 + if (p1 && p2) {
1.31 + res = strcmp(name1, name2);
1.32 if (res == 0)
1.33 - res = versioncmp(&ppool[p->version],
1.34 - &upool[u->version]);
1.35 + res = versioncmp(version1, version2);
1.36 }
1.37
1.38 - if (u == uend || res < 0) {
1.39 - callback(&ppool[p->name], &ppool[p->version],
1.40 - NULL, data);
1.41 - p++;
1.42 - continue;
1.43 - } else if (p == pend || res > 0) {
1.44 - callback(&upool[u->name], NULL, &upool[u->version],
1.45 - data);
1.46 - u++;
1.47 - continue;
1.48 - } else {
1.49 - p++;
1.50 - u++;
1.51 - }
1.52 + if (p2 == NULL || res < 0)
1.53 + callback(name1, version1, NULL, data);
1.54 + else if (p1 == NULL || res > 0)
1.55 + callback(name2, NULL, version2, data);
1.56 +
1.57 + if (p1 != NULL && res <= 0)
1.58 + razor_package_iterator_next(pi1, &p1,
1.59 + &name1, &version1);
1.60 + if (p2 != NULL && res >= 0)
1.61 + razor_package_iterator_next(pi2, &p2,
1.62 + &name2, &version2);
1.63 }
1.64 +
1.65 + razor_package_iterator_destroy(pi1);
1.66 + razor_package_iterator_destroy(pi2);
1.67 }