Re: [PATCH v6 04/11] test-regex: expose full regcomp() to the command line
From: Junio C Hamano <hidden>
Date: 2016-06-15 23:08:10
Eric Sunshine [off-list ref] writes:
On Fri, Feb 5, 2016 at 9:03 PM, Nguyễn Thái Ngọc Duy [off-list ref] wrote:quoted
diff --git a/test-regex.c b/test-regex.c@@ -21,8 +38,38 @@ static int test_regex_bug(void) int main(int argc, char **argv) { + const char *pat; + const char *str; + int flags = 0; + regex_t r; + regmatch_t m[1]; + if (argc == 2 && !strcmp(argv[1], "--bug")) return test_regex_bug(); - else - die("must be used with --bug"); + else if (argc < 3) + die("usage: test-regex --bug\n" + " test-regex <pattern> <string> [<options>]");This is just a test program, so it probably isn't that important, but die() automatically prepends "fatal: " which means the alignment of the second line will be wrong. Perhaps you want to use usage() instead which automatically prepends "usage: " (and drop the literal "usage: " from the above string).
So true.
quoted
+ argv++; + pat = *argv++; + str = *argv++; + while (*argv) { + struct reg_flag *rf; + for (rf = reg_flags; rf->name; rf++) + if (!strcmp(*argv, rf->name)) { + flags |= rf->flag; + break; + } + if (!rf->name) + die("do not recognize %s", *argv); + argv++; + } + git_setup_gettext(); + + if (regcomp(&r, pat, flags)) + die("failed regcomp() for pattern '%s'", pat); + if (regexec(&r, str, 1, m, 0)) + return 1; + + return 0; }This version is much easier to read without the "bug" special case spread throughout the code. Thanks.