]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
Refactor linkedpkg handling
authorMichael Schroeder <mls@suse.de>
Tue, 6 Dec 2022 14:43:35 +0000 (15:43 +0100)
committerMichael Schroeder <mls@suse.de>
Tue, 6 Dec 2022 14:43:35 +0000 (15:43 +0100)
Only export one find_autopackage_name function to be used
for language lookups. Also make a couple of internal
functions static.

src/linkedpkg.c
src/linkedpkg.h
src/solvable.c

index 5912f98cf2cd082b77fc41ecf967db9e420199d3..26fb70668448ff11785c1d493d1506e3a4041d6b 100644 (file)
@@ -44,7 +44,7 @@
 
 #ifdef ENABLE_LINKED_PKGS
 
-void
+static void
 find_application_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Queue *qp)
 {
   Id req = 0;
@@ -121,7 +121,7 @@ find_application_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp
     *prvidp = prv;
 }
 
-void
+static void
 find_product_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Queue *qp)
 {
   Id p, pp, namerelid;
@@ -232,7 +232,7 @@ find_product_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Qu
     *prvidp = solvable_selfprovidedep(s);
 }
 
-void
+static void
 find_pattern_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Queue *qp)
 {
   Id p, pp, *pr, apevr = 0, aprel = 0;
@@ -274,37 +274,31 @@ find_pattern_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Qu
     *prvidp = aprel;
 }
 
-/* the following two functions are used in solvable_lookup_str_base to do
+/* the following function is used in solvable_lookup_str_base to do
  * translated lookups on the product/pattern packages
  */
 Id
-find_autopattern_name(Pool *pool, Solvable *s)
+find_autopackage_name(Pool *pool, Solvable *s)
 {
+  const char *autoprv = 0;
+  const char *n = pool_id2str(pool, s->name);
   Id prv, *prvp;
-  if (!s->provides)
-    return 0;
-  for (prvp = s->repo->idarraydata + s->provides; (prv = *prvp++) != 0; )
-    if (ISRELDEP(prv))
-      {
-        Reldep *rd = GETRELDEP(pool, prv);
-        if (rd->flags == REL_EQ && !strcmp(pool_id2str(pool, rd->name), "autopattern()"))
-          return strncmp(pool_id2str(pool, rd->evr), "pattern:", 8) != 0 ? rd->evr : 0;
-      }
-  return 0;
-}
 
-Id
-find_autoproduct_name(Pool *pool, Solvable *s)
-{
-  Id prv, *prvp;
-  if (!s->provides)
+  if (*n == 'p')
+    {
+      if (!strncmp("pattern:", n, 8))
+       autoprv = "autopattern()";
+      if (!strncmp("product:", n, 8))
+       autoprv = "autoproduct()";
+    }
+  if (!autoprv)
     return 0;
   for (prvp = s->repo->idarraydata + s->provides; (prv = *prvp++) != 0; )
     if (ISRELDEP(prv))
       {
         Reldep *rd = GETRELDEP(pool, prv);
-        if (rd->flags == REL_EQ && !strcmp(pool_id2str(pool, rd->name), "autoproduct()"))
-          return strncmp(pool_id2str(pool, rd->evr), "product:", 8) != 0 ? rd->evr : 0;
+        if (rd->flags == REL_EQ && !strcmp(pool_id2str(pool, rd->name), autoprv))
+          return rd->evr;
       }
   return 0;
 }
index 51b82a5d197a18fab5879cb5e6ef89a113916840..4cf5561f71ecefd0d464ca1c5b8c0ac6defa5aa6 100644 (file)
@@ -25,12 +25,7 @@ has_package_link(Pool *pool, Solvable *s)
   return 0;
 }
 
-extern void find_application_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Queue *qp);
-extern void find_product_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Queue *qp);
-extern void find_pattern_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Queue *qp);
-
-extern Id find_autopattern_name(Pool *pool, Solvable *s);
-extern Id find_autoproduct_name(Pool *pool, Solvable *s);
+extern Id find_autopackage_name(Pool *pool, Solvable *s);
 
 /* generic */
 extern void find_package_link(Pool *pool, Solvable *s, Id *reqidp, Queue *qr, Id *prvidp, Queue *qp);
index fc4e98269201fa0f299fd7a7348059eb37fe126f..657a8b828e8a009aa6625b80020c255c2987068c 100644 (file)
@@ -189,16 +189,11 @@ solvable_lookup_str_base(Solvable *s, Id keyname, Id basekeyname, int usebase)
        }
 #ifdef ENABLE_LINKED_PKGS
       /* autopattern/product translation magic */
-      if (pass)
+      if (pass == 1 && name == s->name)
        {
-         const char *n = pool_id2str(pool, name);
-         if (*n == 'p')
-           {
-             if (!strncmp("pattern:", n, 8) && (name = find_autopattern_name(pool, s)) != 0)
-               pass = -1;
-             if (!strncmp("product:", n, 8) && (name = find_autoproduct_name(pool, s)) != 0)
-               pass = -1;
-           }
+         name = find_autopackage_name(pool, s);
+         if (name && name != s->name)
+           pass = -1;  /* start over with new name */
        }
 #endif
     }