Signed-off-by: Nguyễn Thái Ngọc Duy <[email protected]>
---
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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html