fix instbuddy generation code
[platform/upstream/libsolv.git] / src / rules.c
index 78cc1e0..6b561cc 100644 (file)
@@ -496,9 +496,9 @@ addlinks(Solver *solv, Solvable *s, Id req, Queue *qr, Id prv, Queue *qp, Map *m
         solv->instbuddy = solv_calloc(installed->end - installed->start, sizeof(Id));
       if (qr->count == 1)
         solv->instbuddy[s - pool->solvables - installed->start] = qr->elements[0];
-      for (i = 0; i < qp->count; i++)
+      for (i = 0; i < qr->count; i++)
        {
-         Id p = qp->elements[i];
+         Id p = qr->elements[i];
          if (pool->solvables[p].repo != installed)
            continue;   /* huh? */
          if (qp->count > 1 || (solv->instbuddy[p - installed->start] != 0 && solv->instbuddy[p - installed->start] != s - pool->solvables))
@@ -1249,8 +1249,8 @@ solver_addupdaterule(Solver *solv, Solvable *s, int allow_all)
   if (!allow_all && !p && solv->dupmap_all)
     {
       queue_push(&solv->orphaned, s - pool->solvables);                /* an orphaned package */
-      if (solv->keep_orphans)
-       p = s - pool->solvables;
+      if (solv->keep_orphans && !(solv->droporphanedmap_all || (solv->droporphanedmap.size && MAPTST(&solv->droporphanedmap, s - pool->solvables - solv->installed->start))))
+       p = s - pool->solvables;        /* keep this orphaned package installed */
     }
 
   if (!allow_all && qs.count && solv->multiversion.size)