Revert the J handling change
authorMatthias Clasen <matthiasc@src.gnome.org>
Sat, 4 Aug 2007 00:38:12 +0000 (00:38 +0000)
committerMatthias Clasen <matthiasc@src.gnome.org>
Sat, 4 Aug 2007 00:38:12 +0000 (00:38 +0000)
svn path=/trunk/; revision=5671

ChangeLog
glib/gregex.c

index 05c50a7..8f42cf5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
 2007-08-03  Matthias Clasen  <mclasen@redhat.com>
 
+       * glib/gregex.c: Revert the J handling change,
+       since it doesn't work.
+
+2007-08-03  Matthias Clasen  <mclasen@redhat.com>
+
        * glib/gregex.c: Fix a C99ism.  (#462549, Kazuki IWAMOTO)
 
 2007-08-03  Matthias Clasen  <mclasen@redhat.com>
index 4f5e9eb..0679daa 100644 (file)
@@ -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);