1 |
commit: 54a6bc76557216d67a21673b8f0e479efae21a79 |
2 |
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon Feb 22 17:41:41 2016 +0000 |
4 |
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon Feb 22 17:41:41 2016 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=54a6bc76 |
7 |
|
8 |
qcheck: precompile ignore regexes |
9 |
|
10 |
This should speed things up a bit. |
11 |
|
12 |
qsize.c | 20 ++++++++++++-------- |
13 |
1 file changed, 12 insertions(+), 8 deletions(-) |
14 |
|
15 |
diff --git a/qsize.c b/qsize.c |
16 |
index 7a2503a..3a11842 100644 |
17 |
--- a/qsize.c |
18 |
+++ b/qsize.c |
19 |
@@ -38,7 +38,7 @@ int qsize_main(int argc, char **argv) |
20 |
q_vdb_ctx *ctx; |
21 |
q_vdb_cat_ctx *cat_ctx; |
22 |
q_vdb_pkg_ctx *pkg_ctx; |
23 |
- int i; |
24 |
+ size_t i; |
25 |
char search_all = 0; |
26 |
struct stat st; |
27 |
char fs_size = 0, summary = 0, summary_only = 0; |
28 |
@@ -50,7 +50,7 @@ int qsize_main(int argc, char **argv) |
29 |
size_t buflen; |
30 |
char *buf; |
31 |
char filename[_Q_PATH_MAX], *filename_root; |
32 |
- queue *ignore_regexp = NULL; |
33 |
+ DECLARE_ARRAY(ignore_regexp); |
34 |
|
35 |
while ((i = GETOPT_LONG(QSIZE, qsize, "")) != -1) { |
36 |
switch (i) { |
37 |
@@ -62,7 +62,12 @@ int qsize_main(int argc, char **argv) |
38 |
case 'm': disp_units = MEGABYTE; str_disp_units = "MiB"; break; |
39 |
case 'k': disp_units = KILOBYTE; str_disp_units = "KiB"; break; |
40 |
case 'b': disp_units = 1; str_disp_units = "bytes"; break; |
41 |
- case 'i': ignore_regexp = add_set(optarg, ignore_regexp); break; |
42 |
+ case 'i': { |
43 |
+ regex_t regex; |
44 |
+ xregcomp(®ex, optarg, REG_EXTENDED|REG_NOSUB); |
45 |
+ xarraypush(ignore_regexp, ®ex, sizeof(regex)); |
46 |
+ break; |
47 |
+ } |
48 |
} |
49 |
} |
50 |
if ((argc == optind) && !search_all) |
51 |
@@ -105,19 +110,18 @@ int qsize_main(int argc, char **argv) |
52 |
num_ignored = num_files = num_nonfiles = num_bytes = 0; |
53 |
while (getline(&buf, &buflen, fp) != -1) { |
54 |
contents_entry *e; |
55 |
- queue *ll; |
56 |
+ regex_t *regex; |
57 |
int ok = 0; |
58 |
|
59 |
e = contents_parse_line(buf); |
60 |
if (!e) |
61 |
continue; |
62 |
|
63 |
- for (ll = ignore_regexp; ll != NULL; ll = ll->next) { |
64 |
- if (rematch(ll->name, e->name, REG_EXTENDED) == 0) { |
65 |
+ array_for_each(ignore_regexp, i, regex) |
66 |
+ if (!regexec(regex, buf, 0, NULL, 0)) { |
67 |
num_ignored += 1; |
68 |
ok = 1; |
69 |
} |
70 |
- } |
71 |
if (ok) |
72 |
continue; |
73 |
|
74 |
@@ -174,7 +178,7 @@ int qsize_main(int argc, char **argv) |
75 |
decimal_point, |
76 |
(unsigned long)(((num_all_bytes%MEGABYTE)*1000)/MEGABYTE)); |
77 |
} |
78 |
- free_sets(ignore_regexp); |
79 |
+ xarrayfree(ignore_regexp); |
80 |
return EXIT_SUCCESS; |
81 |
} |