From: Michael Schroeder Date: Tue, 6 Dec 2022 14:43:35 +0000 (+0100) Subject: Refactor linkedpkg handling X-Git-Tag: 0.7.23~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=239e76cf53fb67a957fff581dc222d5907364b39;p=thirdparty%2Flibsolv.git Refactor linkedpkg handling Only export one find_autopackage_name function to be used for language lookups. Also make a couple of internal functions static. --- diff --git a/src/linkedpkg.c b/src/linkedpkg.c index 5912f98c..26fb7066 100644 --- a/src/linkedpkg.c +++ b/src/linkedpkg.c @@ -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; } diff --git a/src/linkedpkg.h b/src/linkedpkg.h index 51b82a5d..4cf5561f 100644 --- a/src/linkedpkg.h +++ b/src/linkedpkg.h @@ -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); diff --git a/src/solvable.c b/src/solvable.c index fc4e9826..657a8b82 100644 --- a/src/solvable.c +++ b/src/solvable.c @@ -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 }