- define solvid2str() function, use sat_sort()
authorMichael Schroeder <mls@suse.de>
Tue, 12 May 2009 10:23:49 +0000 (12:23 +0200)
committerMichael Schroeder <mls@suse.de>
Tue, 12 May 2009 10:23:49 +0000 (12:23 +0200)
src/policy.c
src/pool.c
src/pool.h
tools/repo_rpmdb.c
tools/repo_susetags.c
tools/repo_write.c

index 0bbe7b1..fe5c570 100644 (file)
@@ -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? */
index 10ab817..49cc911 100644 (file)
@@ -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++)
index cdf4fcb..55c047b 100644 (file)
@@ -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);
index 1a49d3a..53451e1 100644 (file)
@@ -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;
index 47a3fad..66880fc 100644 (file)
@@ -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
index 1dcd5da..f669a01 100644 (file)
@@ -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++)