qdepends: restore regex matching capabilities for reverse dependencies The use of atom matching unintendedly removed the ability to use regexes, which broke app-admin/gentoo-perl-helpers. This patch removes the atom matching, and reverts to using regex matching always to restore behaviour. Bug: https://bugs.gentoo.org/683430 --- a/qdepends.c +++ b/qdepends.c @@ -483,11 +483,9 @@ int ret; regex_t preg; regmatch_t match; - depend_atom *aq; depend_atom *as; depend_atom *ac; char firstmatch = 0; - char *sslot; if (!q_vdb_pkg_eat(pkg_ctx, state->depend_file, &depend, &depend_len)) return 0; @@ -526,34 +524,17 @@ return 1; } - aq = atom_explode(state->query); - if (!aq) { - /* "fall" back to old behaviour of just performing an extended - * regular expression match */ - if (wregcomp(&preg, state->query, REG_EXTENDED) != 0) { - dep_burn_tree(dep_tree); - return 1; - } + /* fallback for old behaviour of just performing an extended + * regular expression match */ + if (wregcomp(&preg, state->query, REG_EXTENDED) != 0) { + dep_burn_tree(dep_tree); + return 1; } match.rm_eo = 0; firstmatch = 1; do { /* find all matches */ - if (!aq) { - ret = regexec(&preg, ptr + match.rm_eo, 1, &match, 0); - } else { - char *loc; - ret = -1; - snprintf(qbuf, sizeof(qbuf), "%s%s%s", - aq->CATEGORY ? aq->CATEGORY : "", - aq->CATEGORY ? "/" : "", - aq->PN); - if ((loc = strstr(ptr + match.rm_eo, qbuf)) != NULL) { - ret = 0; - match.rm_so = loc - ptr; - match.rm_eo = match.rm_so + strlen(qbuf); - } - } + ret = regexec(&preg, ptr + match.rm_eo, 1, &match, 0); if (ret != 0) break; @@ -571,18 +552,6 @@ ptr + match.rm_so); ac = atom_explode(qbuf); - /* drop SLOT when not present in aq so we can match atoms - * regardless */ - sslot = ac->SLOT; - if (aq->SLOT == NULL && ac->SLOT != NULL) - ac->SLOT = NULL; - ret = atom_compare(ac, aq); - ac->SLOT = sslot; - if (ret != EQUAL) { - atom_implode(ac); - break; - } - if (firstmatch == 1) { firstmatch = 0; printf("%s%s/%s%s%s%c", BOLD, catname, BLUE, @@ -615,11 +584,7 @@ if (verbose && firstmatch == 0) printf("\n"); - if (!aq) { - regfree(&preg); - } else { - atom_implode(aq); - } + regfree(&preg); atom_implode(as); dep_burn_tree(dep_tree);