commit: 54a6bc76557216d67a21673b8f0e479efae21a79
Author: Mike Frysinger <vapier <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 22 17:41:41 2016 +0000
Commit: Mike Frysinger <vapier <AT> gentoo <DOT> org>
CommitDate: Mon Feb 22 17:41:41 2016 +0000
URL: https://gitweb.gentoo.org/proj/portage-utils.git/commit/?id=54a6bc76
qcheck: precompile ignore regexes
This should speed things up a bit.
qsize.c | 20 ++++++++++++--------
1 file changed, 12 insertions(+), 8 deletions(-)
diff --git a/qsize.c b/qsize.c
index 7a2503a..3a11842 100644
--- a/qsize.c
+++ b/qsize.c
@@ -38,7 +38,7 @@ int qsize_main(int argc, char **argv)
q_vdb_ctx *ctx;
q_vdb_cat_ctx *cat_ctx;
q_vdb_pkg_ctx *pkg_ctx;
- int i;
+ size_t i;
char search_all = 0;
struct stat st;
char fs_size = 0, summary = 0, summary_only = 0;
@@ -50,7 +50,7 @@ int qsize_main(int argc, char **argv)
size_t buflen;
char *buf;
char filename[_Q_PATH_MAX], *filename_root;
- queue *ignore_regexp = NULL;
+ DECLARE_ARRAY(ignore_regexp);
while ((i = GETOPT_LONG(QSIZE, qsize, "")) != -1) {
switch (i) {
@@ -62,7 +62,12 @@ int qsize_main(int argc, char **argv)
case 'm': disp_units = MEGABYTE; str_disp_units = "MiB"; break;
case 'k': disp_units = KILOBYTE; str_disp_units = "KiB"; break;
case 'b': disp_units = 1; str_disp_units = "bytes"; break;
- case 'i': ignore_regexp = add_set(optarg, ignore_regexp); break;
+ case 'i': {
+ regex_t regex;
+ xregcomp(®ex, optarg, REG_EXTENDED|REG_NOSUB);
+ xarraypush(ignore_regexp, ®ex, sizeof(regex));
+ break;
+ }
}
}
if ((argc == optind) && !search_all)
@@ -105,19 +110,18 @@ int qsize_main(int argc, char **argv)
num_ignored = num_files = num_nonfiles = num_bytes = 0;
while (getline(&buf, &buflen, fp) != -1) {
contents_entry *e;
- queue *ll;
+ regex_t *regex;
int ok = 0;
e = contents_parse_line(buf);
if (!e)
continue;
- for (ll = ignore_regexp; ll != NULL; ll =
ll->next) {
- if (rematch(ll->name, e->name,
REG_EXTENDED) == 0) {
+ array_for_each(ignore_regexp, i, regex)
+ if (!regexec(regex, buf, 0, NULL, 0)) {
num_ignored += 1;
ok = 1;
}
- }
if (ok)
continue;
@@ -174,7 +178,7 @@ int qsize_main(int argc, char **argv)
decimal_point,
(unsigned
long)(((num_all_bytes%MEGABYTE)*1000)/MEGABYTE));
}
- free_sets(ignore_regexp);
+ xarrayfree(ignore_regexp);
return EXIT_SUCCESS;
}