Imported Upstream version 0.6.12
[platform/upstream/libsolv.git] / src / pool.c
index f78f71a..33293b5 100644 (file)
@@ -421,7 +421,7 @@ pool_shrink_whatprovidesaux(Pool *pool)
        *wp++ = id;
     }
   newoff = wp - pool->whatprovidesauxdata;
-  solv_realloc(pool->whatprovidesauxdata, newoff * sizeof(Id));
+  pool->whatprovidesauxdata = solv_realloc(pool->whatprovidesauxdata, newoff * sizeof(Id));
   POOL_DEBUG(SOLV_DEBUG_STATS, "shrunk whatprovidesauxdata from %d to %d\n", pool->whatprovidesauxdataoff, newoff);
   pool->whatprovidesauxdataoff = newoff;
 }
@@ -1014,10 +1014,21 @@ pool_addrelproviders(Pool *pool, Id d)
 
        case REL_AND:
        case REL_OR:
+       case REL_COND:
+         if (flags == REL_COND)
+           {
+             if (ISRELDEP(evr))
+               {
+                 Reldep *rd2 = GETRELDEP(pool, evr);
+                 evr = rd2->flags == REL_ELSE ? rd2->evr : 0;
+               }
+             else
+               evr = 0;        /* assume cond is true */
+           }
          wp = pool_whatprovides(pool, name);
          if (!pool->whatprovidesdata[wp])
-           wp = pool_whatprovides(pool, evr);
-         else
+           wp = evr ? pool_whatprovides(pool, evr) : 1;
+         else if (evr)
            {
              /* sorted merge */
              pp2 = pool_whatprovides_ptr(pool, evr);
@@ -1043,11 +1054,6 @@ pool_addrelproviders(Pool *pool, Id d)
            }
          break;
 
-       case REL_COND:
-         /* assume the condition is true */
-         wp = pool_whatprovides(pool, name);
-         break;
-
        case REL_NAMESPACE:
          if (name == NAMESPACE_OTHERPROVIDERS)
            {