Signed-off-by: Nguyễn Thái Ngọc Duy <pclo...@gmail.com>
---
 test-regex.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 50 insertions(+), 6 deletions(-)

diff --git a/test-regex.c b/test-regex.c
index 0dc598e..3b5641c 100644
--- a/test-regex.c
+++ b/test-regex.c
@@ -1,19 +1,63 @@
 #include "git-compat-util.h"
+#include "gettext.h"
+
+struct reg_flag {
+       const char *name;
+       int flag;
+};
+
+static struct reg_flag reg_flags[] = {
+       { "EXTENDED",    REG_EXTENDED   },
+       { "NEWLINE",     REG_NEWLINE    },
+       { "ICASE",       REG_ICASE      },
+       { "NOTBOL",      REG_NOTBOL     },
+#ifdef REG_STARTEND
+       { "STARTEND",    REG_STARTEND   },
+#endif
+       { NULL, 0 }
+};
 
 int main(int argc, char **argv)
 {
-       char *pat = "[^={} \t]+";
-       char *str = "={}\nfred";
+       const char *pat;
+       const char *str;
+       int flags = 0;
        regex_t r;
        regmatch_t m[1];
 
-       if (regcomp(&r, pat, REG_EXTENDED | REG_NEWLINE))
+       if (argc == 1) {
+               /* special case, bug check */
+               pat = "[^={} \t]+";
+               str = "={}\nfred";
+               flags = REG_EXTENDED | REG_NEWLINE;
+       } else {
+               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))
-               die("no match of pattern '%s' to string '%s'", pat, str);
+       if (regexec(&r, str, 1, m, 0)) {
+               if (argc == 1)
+                       die("no match of pattern '%s' to string '%s'", pat, 
str);
+               return 1;
+       }
 
        /* http://sourceware.org/bugzilla/show_bug.cgi?id=3957  */
-       if (m[0].rm_so == 3) /* matches '\n' when it should not */
+       if (argc == 1 && m[0].rm_so == 3) /* matches '\n' when it should not */
                die("regex bug confirmed: re-build git with NO_REGEX=1");
 
        exit(0);
-- 
2.3.0.rc1.137.g477eb31

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to