diff --git a/ChangeLog b/ChangeLog index 05c50a780..8f42cf5a3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2007-08-03 Matthias Clasen + + * glib/gregex.c: Revert the J handling change, + since it doesn't work. + 2007-08-03 Matthias Clasen * glib/gregex.c: Fix a C99ism. (#462549, Kazuki IWAMOTO) diff --git a/glib/gregex.c b/glib/gregex.c index 4f5e9eb40..0679daac1 100644 --- a/glib/gregex.c +++ b/glib/gregex.c @@ -625,8 +625,18 @@ get_matched_substring_number (const GMatchInfo *match_info, gchar *first, *last; guchar *entry; -#if PCRE_MAJOR > 7 || PCRE_MINOR >= 2 - if (!(match_info->regex->compile_opts & G_REGEX_DUPNAMES)) + /* + * FIXME: (?J) may be used inside the pattern as the equivalent of + * DUPNAMES compile option. In this case we can't know about it, + * and pcre doesn't tell us about it either, it uses private flag + * PCRE_JCHANGED for this. So we have to always search string + * table, unlike pcre which uses pcre_get_stringnumber() shortcut + * when possible. It shouldn't be actually bad since + * pcre_get_stringtable_entries() uses binary search; still would + * be better to fix it, to be not worse than pcre. + */ +#if 0 + if ((match_info->regex->compile_opts & G_REGEX_DUPNAMES) == 0) return pcre_get_stringnumber (match_info->regex->pcre_re, name); #endif @@ -855,7 +865,7 @@ g_regex_new (const gchar *pattern, gint erroffset; gboolean optimize = FALSE; static gboolean initialized = FALSE; - + g_return_val_if_fail (pattern != NULL, NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); g_return_val_if_fail ((compile_options & ~G_REGEX_COMPILE_MASK) == 0, NULL); @@ -931,16 +941,6 @@ g_regex_new (const gchar *pattern, return NULL; } -#if PCRE_MAJOR > 7 || PCRE_MINOR >= 2 - if (!(compile_options & G_REGEX_DUPNAMES)) - { - gboolean jchanged = FALSE; - pcre_fullinfo (re, NULL, PCRE_INFO_JCHANGED, &jchanged); - if (jchanged) - compile_options |= G_REGEX_DUPNAMES; - } -#endif - regex = g_new0 (GRegex, 1); regex->ref_count = 1; regex->pattern = g_strdup (pattern);