From: Michael Schroeder Date: Tue, 12 May 2009 10:23:49 +0000 (+0200) Subject: - define solvid2str() function, use sat_sort() X-Git-Tag: BASE-SuSE-Code-12_1-Branch~289 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a6ea1d8f4f8ffc5bc556fb41c4d6465bb9a76caa;p=platform%2Fupstream%2Flibsolv.git - define solvid2str() function, use sat_sort() --- diff --git a/src/policy.c b/src/policy.c index 0bbe7b1..fe5c570 100644 --- a/src/policy.c +++ b/src/policy.c @@ -22,8 +22,6 @@ #include "poolarch.h" -static Solver *prune_to_best_version_sortcmp_data; - /*-----------------------------------------------------------------*/ /* @@ -32,9 +30,9 @@ static Solver *prune_to_best_version_sortcmp_data; */ static int -prune_to_best_version_sortcmp(const void *ap, const void *bp) +prune_to_best_version_sortcmp(const void *ap, const void *bp, void *dp) { - Solver *solv = prune_to_best_version_sortcmp_data; + Solver *solv = dp; Pool *pool = solv->pool; int r; Id a = *(Id *)ap; @@ -282,9 +280,8 @@ prune_to_best_version(Solver *solv, Queue *plist) return; POOL_DEBUG(SAT_DEBUG_POLICY, "prune_to_best_version %d\n", plist->count); - prune_to_best_version_sortcmp_data = solv; /* sort by name first, prefer installed */ - qsort(plist->elements, plist->count, sizeof(Id), prune_to_best_version_sortcmp); + sat_sort(plist->elements, plist->count, sizeof(Id), prune_to_best_version_sortcmp, solv); /* delete obsoleted. hmm, looks expensive! */ /* FIXME maybe also check provides depending on noupdateprovide? */ diff --git a/src/pool.c b/src/pool.c index 10ab817..49cc911 100644 --- a/src/pool.c +++ b/src/pool.c @@ -132,13 +132,11 @@ pool_set_installed(Pool *pool, Repo *installed) pool_freewhatprovides(pool); } -static Pool *pool_shrink_whatprovides_sortcmp_data; - static int -pool_shrink_whatprovides_sortcmp(const void *ap, const void *bp) +pool_shrink_whatprovides_sortcmp(const void *ap, const void *bp, void *dp) { int r; - Pool *pool = pool_shrink_whatprovides_sortcmp_data; + Pool *pool = dp; Id oa, ob, *da, *db; oa = pool->whatprovides[*(Id *)ap]; ob = pool->whatprovides[*(Id *)bp]; @@ -178,8 +176,7 @@ pool_shrink_whatprovides(Pool *pool) sorted = sat_malloc2(pool->ss.nstrings, sizeof(Id)); for (id = 0; id < pool->ss.nstrings; id++) sorted[id] = id; - pool_shrink_whatprovides_sortcmp_data = pool; - qsort(sorted + 1, pool->ss.nstrings - 1, sizeof(Id), pool_shrink_whatprovides_sortcmp); + sat_sort(sorted + 1, pool->ss.nstrings - 1, sizeof(Id), pool_shrink_whatprovides_sortcmp, pool); last = 0; lastid = 0; for (i = 1; i < pool->ss.nstrings; i++) diff --git a/src/pool.h b/src/pool.h index cdf4fcb..55c047b 100644 --- a/src/pool.h +++ b/src/pool.h @@ -179,6 +179,10 @@ static inline Solvable *pool_id2solvable(Pool *pool, Id p) return pool->solvables + p; } extern const char *solvable2str(Pool *pool, Solvable *s); +static inline const char *solvid2str(Pool *pool, Id p) +{ + return solvable2str(pool, pool->solvables + p); +} void pool_set_languages(Pool *pool, const char **languages, int nlanguages); Id pool_id2langid(Pool *pool, Id id, const char *lang, int create); diff --git a/tools/repo_rpmdb.c b/tools/repo_rpmdb.c index 1a49d3a..53451e1 100644 --- a/tools/repo_rpmdb.c +++ b/tools/repo_rpmdb.c @@ -1117,7 +1117,7 @@ solvable_copy(Solvable *s, Solvable *r, Repodata *data, Id *dircache) /* used to sort entries returned in some database order */ static int -rpmids_sort_cmp(const void *va, const void *vb) +rpmids_sort_cmp(const void *va, const void *vb, void *dp) { struct rpmid const *a = va, *b = vb; int r; @@ -1127,20 +1127,19 @@ rpmids_sort_cmp(const void *va, const void *vb) return a->dbid - b->dbid; } -static Repo *pkgids_sort_cmp_data; - static int -pkgids_sort_cmp(const void *va, const void *vb) +pkgids_sort_cmp(const void *va, const void *vb, void *dp) { - Pool *pool = pkgids_sort_cmp_data->pool; + Repo *repo = dp; + Pool *pool = repo->pool; Solvable *a = pool->solvables + *(Id *)va; Solvable *b = pool->solvables + *(Id *)vb; Id *rpmdbid; if (a->name != b->name) return strcmp(id2str(pool, a->name), id2str(pool, b->name)); - rpmdbid = pkgids_sort_cmp_data->rpmdbid; - return rpmdbid[(a - pool->solvables) - pkgids_sort_cmp_data->start] - rpmdbid[(b - pool->solvables) - pkgids_sort_cmp_data->start]; + rpmdbid = repo->rpmdbid; + return rpmdbid[(a - pool->solvables) - repo->start] - rpmdbid[(b - pool->solvables) - repo->start]; } static void @@ -1406,8 +1405,7 @@ repo_add_rpmdb(Repo *repo, Repo *ref, const char *rootdir, int flags) pkgids = sat_malloc2(repo->end - repo->start, sizeof(Id)); for (i = repo->start; i < repo->end; i++) pkgids[i - repo->start] = i; - pkgids_sort_cmp_data = repo; - qsort(pkgids, repo->end - repo->start, sizeof(Id), pkgids_sort_cmp); + sat_sort(pkgids, repo->end - repo->start, sizeof(Id), pkgids_sort_cmp, repo); /* adapt order */ for (i = repo->start; i < repo->end; i++) { @@ -1476,7 +1474,7 @@ repo_add_rpmdb(Repo *repo, Repo *ref, const char *rootdir, int flags) db = 0; /* sort rpmids */ - qsort(rpmids, nrpmids, sizeof(*rpmids), rpmids_sort_cmp); + sat_sort(rpmids, nrpmids, sizeof(*rpmids), rpmids_sort_cmp, 0); dbidp = (unsigned char *)&dbid; rpmheadsize = 0; diff --git a/tools/repo_susetags.c b/tools/repo_susetags.c index 47a3fad..66880fc 100644 --- a/tools/repo_susetags.c +++ b/tools/repo_susetags.c @@ -201,7 +201,7 @@ set_checksum(struct parsedata *pd, Repodata *data, Id handle, Id keyname, char * */ static int -id3_cmp(const void *v1, const void *v2) +id3_cmp(const void *v1, const void *v2, void *dp) { Id *i1 = (Id*)v1; Id *i2 = (Id*)v2; @@ -222,7 +222,7 @@ commit_diskusage(struct parsedata *pd, Id handle) /* Now sort in dirid order. This ensures that parents come before their children. */ if (pd->ndirs > 1) - qsort(pd->dirs, pd->ndirs, sizeof(pd->dirs[0]), id3_cmp); + sat_sort(pd->dirs, pd->ndirs, sizeof(pd->dirs[0]), id3_cmp, 0); /* Substract leaf numbers from all parents to make the numbers non-cumulative. This must be done post-order (i.e. all leafs adjusted before parents). We ensure this by starting at the end of diff --git a/tools/repo_write.c b/tools/repo_write.c index 1dcd5da..f669a01 100644 --- a/tools/repo_write.c +++ b/tools/repo_write.c @@ -96,7 +96,7 @@ incneedidarray(Pool *pool, Id *idarray, NeedId *needid) */ static int -needid_cmp_need(const void *ap, const void *bp) +needid_cmp_need(const void *ap, const void *bp, void *dp) { const NeedId *a = ap; const NeedId *b = bp; @@ -107,19 +107,19 @@ needid_cmp_need(const void *ap, const void *bp) return a->map - b->map; } -static Stringpool *cmp_spool; - static int -needid_cmp_need_s(const void *ap, const void *bp) +needid_cmp_need_s(const void *ap, const void *bp, void *dp) { const NeedId *a = ap; const NeedId *b = bp; + Stringpool *spool = dp; + int r; r = b->need - a->need; if (r) return r; - const char *as = cmp_spool->stringspace + cmp_spool->strings[a->map]; - const char *bs = cmp_spool->stringspace + cmp_spool->strings[b->map]; + const char *as = spool->stringspace + spool->strings[a->map]; + const char *bs = spool->stringspace + spool->strings[b->map]; return strcmp(as, bs); } @@ -251,7 +251,7 @@ write_idarray(FILE *fp, Pool *pool, NeedId *needid, Id *ids) } static int -cmp_ids (const void *pa, const void *pb) +cmp_ids (const void *pa, const void *pb, void *dp) { Id a = *(Id *)pa; Id b = *(Id *)pb; @@ -303,9 +303,9 @@ write_idarray_sort(FILE *fp, Pool *pool, NeedId *needid, Id *ids, Id marker) if (sids[i] == marker) break; if (i > 1) - qsort(sids, i, sizeof (Id), cmp_ids); + sat_sort(sids, i, sizeof (Id), cmp_ids, 0); if ((len - i) > 2) - qsort(sids + i + 1, len - i - 1, sizeof(Id), cmp_ids); + sat_sort(sids + i + 1, len - i - 1, sizeof(Id), cmp_ids, 0); Id id, old = 0; @@ -478,9 +478,9 @@ data_addidarray_sort(struct extdata *xd, Pool *pool, NeedId *needid, Id *ids, Id if (sids[i] == marker) break; if (i > 1) - qsort(sids, i, sizeof (Id), cmp_ids); + sat_sort(sids, i, sizeof (Id), cmp_ids, 0); if ((len - i) > 2) - qsort(sids + i + 1, len - i - 1, sizeof(Id), cmp_ids); + sat_sort(sids + i + 1, len - i - 1, sizeof(Id), cmp_ids, 0); Id id, old = 0; @@ -1509,15 +1509,14 @@ fprintf(stderr, "dir %d used %d\n", i, cbdata.dirused ? cbdata.dirused[i] : 1); for (i = 1; i < reloff + pool->nrels; i++) needid[i].map = i; - cmp_spool = spool; #if 0 - qsort(needid + 1, spool->nstrings - 1, sizeof(*needid), needid_cmp_need_s); + sat_sort(needid + 1, spool->nstrings - 1, sizeof(*needid), needid_cmp_need_s, spool); #else /* make first entry '' */ needid[1].need = 1; - qsort(needid + 2, spool->nstrings - 2, sizeof(*needid), needid_cmp_need_s); + sat_sort(needid + 2, spool->nstrings - 2, sizeof(*needid), needid_cmp_need_s, spool); #endif - qsort(needid + reloff, pool->nrels, sizeof(*needid), needid_cmp_need); + sat_sort(needid + reloff, pool->nrels, sizeof(*needid), needid_cmp_need, 0); sizeid = 0; for (i = 1; i < reloff; i++)