regex: Fix newline definition for system PCRE

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.
This commit is contained in:
Christian Persch 2012-06-07 16:42:50 +02:00
parent 91ba8ae156
commit 86a04a05e6
2 changed files with 8 additions and 1 deletions

View 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);

View 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);