Merge branch 'master' of git@git.opensuse.org:projects/zypp/sat-solver
[platform/upstream/libsolv.git] / src / repo.c
index af7c402..4fc38b7 100644 (file)
@@ -275,6 +275,8 @@ repo_free(Repo *repo, int reuseids)
   int i;
 
   pool_freewhatprovides(pool);
+  if (repo == pool->installed)
+    pool->installed = 0;
 
   if (reuseids && repo->end == pool->nsolvables)
     {
@@ -332,7 +334,7 @@ repo_sidedata_extend(Repo *repo, void *b, size_t size, Id p, int count)
     { 
       int d = repo->start - p;
       b = sat_extend(b, n, d, size, REPO_SIDEDATA_BLOCK);
-      memmove(b + d * size, b, n * size);
+      memmove((char*)b + d * size, b, n * size);
       memset(b, 0, d * size);
       n += d;
     }     
@@ -340,7 +342,7 @@ repo_sidedata_extend(Repo *repo, void *b, size_t size, Id p, int count)
     { 
       int d = p + count - repo->end;
       b = sat_extend(b, n, d, size, REPO_SIDEDATA_BLOCK);
-      memset(b + n * size, 0, d * size);
+      memset((char*)b + n * size, 0, d * size);
     }     
   return b;
 }
@@ -581,8 +583,13 @@ repo_matchvalue(void *cbdata, Solvable *s, Repodata *data, Repokey *key, KeyValu
 {
   struct matchdata *md = cbdata;
 
-  if (md->matcher.match && !datamatcher_match(&md->matcher, data, key, kv))
-    return 0;
+  if (md->matcher.match)
+    {
+      if (!repodata_stringify(md->pool, data, key, kv, md->flags))
+       return 0;
+      if (!datamatcher_match(&md->matcher, kv->str))
+       return 0;
+    }
   md->stop = md->callback(md->callback_data, s, data, key, kv);
   return md->stop;
 }
@@ -762,7 +769,7 @@ repo_search_md(Repo *repo, Id p, Id keyname, struct matchdata *md)
        }
       if (data->state == REPODATA_ERROR)
        continue;
-      repodata_search(data, p, keyname, repo_matchvalue, md);
+      repodata_search(data, p, keyname, md->flags, repo_matchvalue, md);
       if (md->stop > SEARCH_NEXT_KEY)
        break;
     }
@@ -779,7 +786,7 @@ repo_search(Repo *repo, Id p, Id keyname, const char *match, int flags, int (*ca
   md.callback = callback;
   md.callback_data = cbdata;
   if (match)
-    datamatcher_init(&md.matcher, md.pool, match, flags);
+    datamatcher_init(&md.matcher, match, flags);
   repo_search_md(repo, p, keyname, &md);
   if (match)
     datamatcher_free(&md.matcher);
@@ -805,7 +812,7 @@ repo_lookup_str(Repo *repo, Id entry, Id keyname)
     }
   for (i = 0, data = repo->repodata; i < repo->nrepodata; i++, data++)
     {
-      if (entry && (entry < data->start || entry >= data->end))
+      if (entry != SOLVID_META && (entry < data->start || entry >= data->end))
        continue;
       if (!repodata_precheck_keyname(data, keyname))
        continue;
@@ -827,13 +834,13 @@ repo_lookup_num(Repo *repo, Id entry, Id keyname, unsigned int notfound)
 
   if (keyname == RPM_RPMDBID)
     {
-      if (repo->rpmdbid && entry && entry >= repo->start && entry < repo->end)
+      if (repo->rpmdbid && entry >= repo->start && entry < repo->end)
        return repo->rpmdbid[entry - repo->start];
       return notfound;
     }
   for (i = 0, data = repo->repodata; i < repo->nrepodata; i++, data++)
     {
-      if (entry && (entry < data->start || entry >= data->end))
+      if (entry != SOLVID_META && (entry < data->start || entry >= data->end))
        continue;
       if (!repodata_precheck_keyname(data, keyname))
        continue;
@@ -872,7 +879,7 @@ repo_lookup_id(Repo *repo, Id entry, Id keyname)
     }   
   for (i = 0, data = repo->repodata; i < repo->nrepodata; i++, data++)
     {   
-      if (entry && (entry < data->start || entry >= data->end))
+      if (entry != SOLVID_META && (entry < data->start || entry >= data->end))
        continue;
       if (!repodata_precheck_keyname(data, keyname))
        continue;
@@ -900,7 +907,7 @@ repo_lookup_bin_checksum(Repo *repo, Id entry, Id keyname, Id *typep)
   int i, j;
   for (i = 0, data = repo->repodata; i < repo->nrepodata; i++, data++)
     {
-      if (entry && (entry < data->start || entry >= data->end))
+      if (entry != SOLVID_META && (entry < data->start || entry >= data->end))
        continue;
       if (!repodata_precheck_keyname(data, keyname))
        continue;
@@ -925,7 +932,7 @@ repo_lookup_void(Repo *repo, Id entry, Id keyname)
   int i, j;
   for (i = 0, data = repo->repodata; i < repo->nrepodata; i++, data++)
     {
-      if (entry && (entry < data->start || entry >= data->end))
+      if (entry != SOLVID_META && (entry < data->start || entry >= data->end))
        continue;
       if (!repodata_precheck_keyname(data, keyname))
        continue;