1 |
commit: 8b633323765e129644ad9a4d93e0d6c467927aa4 |
2 |
Author: Fabian Groffen <grobian <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sun Apr 28 16:49:37 2019 +0000 |
4 |
Commit: Fabian Groffen <grobian <AT> gentoo <DOT> org> |
5 |
CommitDate: Sun Apr 28 17:09:51 2019 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=8b633323 |
7 |
|
8 |
libq/vdb: implement q_vdb_filter_pkg following PMS |
9 |
|
10 |
exclude things like Metadata.gz and other random cruft by following PMS |
11 |
package name descriptions |
12 |
|
13 |
Signed-off-by: Fabian Groffen <grobian <AT> gentoo.org> |
14 |
|
15 |
libq/vdb.c | 30 +++++++++++++++++++++++++++--- |
16 |
1 file changed, 27 insertions(+), 3 deletions(-) |
17 |
|
18 |
diff --git a/libq/vdb.c b/libq/vdb.c |
19 |
index 34edfd2..447bd6f 100644 |
20 |
--- a/libq/vdb.c |
21 |
+++ b/libq/vdb.c |
22 |
@@ -88,6 +88,7 @@ q_vdb_filter_cat(const struct dirent *de) |
23 |
bool founddash; |
24 |
|
25 |
#ifdef DT_UNKNOWN |
26 |
+ /* cat must be a dir */ |
27 |
if (de->d_type != DT_UNKNOWN && |
28 |
de->d_type != DT_DIR && |
29 |
de->d_type != DT_LNK) |
30 |
@@ -204,10 +205,33 @@ q_vdb_close_cat(q_vdb_cat_ctx *cat_ctx) |
31 |
int |
32 |
q_vdb_filter_pkg(const struct dirent *de) |
33 |
{ |
34 |
- if (de->d_name[0] == '.' || de->d_name[0] == '-') |
35 |
- return 0; |
36 |
+ int i; |
37 |
+ bool founddash = false; |
38 |
|
39 |
- return 1; |
40 |
+ /* PMS 3.1.2 */ |
41 |
+ for (i = 0; de->d_name[i] != '\0'; i++) { |
42 |
+ switch (de->d_name[i]) { |
43 |
+ case '_': |
44 |
+ break; |
45 |
+ case '-': |
46 |
+ founddash = true; |
47 |
+ /* fall through */ |
48 |
+ case '+': |
49 |
+ if (i) |
50 |
+ break; |
51 |
+ return 0; |
52 |
+ default: |
53 |
+ if ((de->d_name[i] >= 'A' && de->d_name[i] <= 'Z') || |
54 |
+ (de->d_name[i] >= 'a' && de->d_name[i] <= 'z') || |
55 |
+ (de->d_name[i] >= '0' && de->d_name[i] <= '9')) |
56 |
+ break; |
57 |
+ if (founddash) |
58 |
+ return 1; |
59 |
+ return 0; |
60 |
+ } |
61 |
+ } |
62 |
+ |
63 |
+ return i; |
64 |
} |
65 |
|
66 |
q_vdb_pkg_ctx * |