ref: refs/heads/master
commit e024379e5ef853b84f5add557cb546af3a37c624
Author: Michael Schroeder
Date: Tue May 12 12:23:49 2009 +0200
- define solvid2str() function, use sat_sort()
---
src/policy.c | 9 +++------
src/pool.c | 9 +++------
src/pool.h | 4 ++++
tools/repo_rpmdb.c | 18 ++++++++----------
tools/repo_susetags.c | 4 ++--
tools/repo_write.c | 29 ++++++++++++++---------------
6 files changed, 34 insertions(+), 39 deletions(-)
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++)
--
To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org
For additional commands, e-mail: zypp-commit+help@opensuse.org