Thread (1 message) 1 message, 1 author, 2016-06-15

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.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help