Gentoo Archives: gentoo-commits

From: Mike Frysinger <vapier@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage-utils:master commit in: /
Date: Mon, 22 Feb 2016 20:37:25
Message-Id: 1456162901.54a6bc76557216d67a21673b8f0e479efae21a79.vapier@gentoo
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(&regex, optarg, REG_EXTENDED|REG_NOSUB);
45 + xarraypush(ignore_regexp, &regex, 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 }