summaryrefslogtreecommitdiff
path: root/app-portage/portage-utils/files/portage-utils-0.74-qdepends-Q-regex.patch
blob: 6d10161d704ecefa38caf75ef2f073884ae4a860 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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);