regex: Fix newline definition for system PCRE
authorChristian Persch <chpe@gnome.org>
Thu, 7 Jun 2012 14:42:50 +0000 (16:42 +0200)
committerChristian Persch <chpe@gnome.org>
Mon, 2 Jul 2012 13:59:39 +0000 (15:59 +0200)
While we PCRE_BSR_UNICODE is the default in the internal PCRE, that may
not be true for the system one. Force the PCRE_BSR_UNICODE flag on it.

glib/gregex.c
glib/tests/regex.c

index efb2d57..44fc049 100644 (file)
@@ -1320,6 +1320,12 @@ g_regex_new (const gchar         *pattern,
 
   compile_options |= PCRE_UCP;
 
+  /* PCRE_BSR_UNICODE is the default for the internal PCRE but
+   * possibly not for the system one.
+   */
+  if (~compile_options & G_REGEX_BSR_ANYCRLF)
+    compile_options |= PCRE_BSR_UNICODE;
+
   /* compile the pattern */
   re = pcre_compile2 (pattern, compile_options, &errcode,
                       &errmsg, &erroffset, NULL);
index ab94055..b0362cd 100644 (file)
@@ -1366,6 +1366,7 @@ test_match_all (gconstpointer d)
 #define PCRE_NO_UTF8_CHECK      0x00002000
 #define PCRE_NEWLINE_ANY        0x00400000
 #define PCRE_UCP                0x20000000
+#define PCRE_BSR_UNICODE        0x01000000
 
 static void
 test_basic (void)
@@ -1377,7 +1378,7 @@ test_basic (void)
   regex = g_regex_new ("[A-Z]+", cflags, mflags, NULL);
 
   g_assert (regex != NULL);
-  g_assert_cmpint (g_regex_get_compile_flags (regex), ==, cflags|PCRE_UTF8|PCRE_NO_UTF8_CHECK|PCRE_NEWLINE_ANY|PCRE_UCP );
+  g_assert_cmpint (g_regex_get_compile_flags (regex), ==, cflags|PCRE_UTF8|PCRE_NO_UTF8_CHECK|PCRE_NEWLINE_ANY|PCRE_UCP|PCRE_BSR_UNICODE);
   g_assert_cmpint (g_regex_get_match_flags (regex), ==, mflags|PCRE_NO_UTF8_CHECK);
 
   g_regex_unref (regex);