You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/app-portage/portage-utils/files/portage-utils-0.74-qdepends...

97 lines
2.3 KiB

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);