[EMAIL PROTECTED] writes:

> I misread the code, it is not a typo. The character class in the regexp
> in the first re_compile_pattern needs to be enclosed in []; now it fails
> with REG_ECTYPE as it should.

Thanks for reporting the problem.  I discovered some other problems
while fixing this, and installed the following patch into gnulib
and coreutils.

This isn't the end of the changes for regex; I also need to merge it
with glibc.  But that's a larger story.

2006-03-25  Paul Eggert  <[EMAIL PROTECTED]>

        * regex.m4 (gl_REGEX): Don't insist on REG_SYNTAX_POSIX_EGREP,
        REG_SYNTAX_EMACS, and REG_IGNORE_CASE.  Settle for the traditional
        glibc names.  Even if glibc is changed to conform to POSIX, the
        traditional names will be available anyway, since regex depends on
        the extensions module.  Also, fix a longstanding typo in the
        implementation of Spencer ERE test #75 from grep 2.3.  Problems
        reported by Emanuele Giaquinta.  Also, change sense of cached
        variable, so that the message makes sense.

--- regex.m4    17 Mar 2006 10:14:32 -0000      1.49
+++ regex.m4    25 Mar 2006 09:48:47 -0000      1.51
@@ -1,4 +1,4 @@
-#serial 33
+#serial 35
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
 # 2006 Free Software Foundation, Inc.
@@ -24,7 +24,7 @@ AC_DEFUN([gl_REGEX],
                     systems with recent-enough versions of the GNU C
                     Library (use with caution on other systems)])])
 
-  case $with_included_regex in
+  case $with_included_regex in #(
   yes|no) ac_use_included_regex=$with_included_regex
        ;;
   '')
@@ -34,20 +34,18 @@ AC_DEFUN([gl_REGEX],
     # regex.c.  The first failing regular expression is from `Spencer ere
     # test #75' in grep-2.3.
     AC_CACHE_CHECK([for working re_compile_pattern],
-                  [gl_cv_func_re_compile_pattern_broken],
+                  [gl_cv_func_re_compile_pattern_working],
       [AC_RUN_IFELSE(
        [AC_LANG_PROGRAM(
          [AC_INCLUDES_DEFAULT
-          #include <regex.h>],
+          #include <regex.h>
+          ],
          [[static struct re_pattern_buffer regex;
            const char *s;
            struct re_registers regs;
-           /* Use the POSIX-compliant spelling with leading REG_,
-              rather than the traditional GNU spelling with leading RE_,
-              so that we reject older libc implementations.  */
-           re_set_syntax (REG_SYNTAX_POSIX_EGREP);
+           re_set_syntax (RE_SYNTAX_POSIX_EGREP);
            memset (&regex, 0, sizeof (regex));
-           s = re_compile_pattern ("a[:@:>@:]b\n", 9, &regex);
+           s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, &regex);
            /* This should fail with _Invalid character class name_ error.  */
            if (!s)
              exit (1);
@@ -81,10 +79,9 @@ AC_DEFUN([gl_REGEX],
              exit (1);
 
            /* The version of regex.c in older versions of gnulib
-              ignored REG_IGNORE_CASE (which was then called RE_ICASE).
-              Detect that problem too.  */
+              ignored RE_ICASE.  Detect that problem too.  */
            memset (&regex, 0, sizeof (regex));
-           re_set_syntax (REG_SYNTAX_EMACS | REG_IGNORE_CASE);
+           re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE);
            s = re_compile_pattern ("x", 1, &regex);
            if (s)
              exit (1);
@@ -101,15 +98,18 @@ AC_DEFUN([gl_REGEX],
               These include glibc 2.3.5 on hosts with 64-bit ptrdiff_t
               and 32-bit int.  */
            if (sizeof (regoff_t) < sizeof (ptrdiff_t)
-               || sizeof (regoff_t) < sizeof (ssize_t))
+               || sizeof (regoff_t) < sizeof (ssize_t))
              exit (1);
 
            exit (0);]])],
-       [gl_cv_func_re_compile_pattern_broken=no],
-       [gl_cv_func_re_compile_pattern_broken=yes],
-       dnl When crosscompiling, assume it is broken.
-       [gl_cv_func_re_compile_pattern_broken=yes])])
-    ac_use_included_regex=$gl_cv_func_re_compile_pattern_broken
+       [gl_cv_func_re_compile_pattern_working=yes],
+       [gl_cv_func_re_compile_pattern_working=no],
+       dnl When crosscompiling, assume it is not working.
+       [gl_cv_func_re_compile_pattern_working=no])])
+    case $gl_cv_func_re_compile_pattern_working in #(
+    yes) ac_use_included_regex=no;; #(
+    no) ac_use_included_regex=yes;;
+    esac
     ;;
   *) AC_MSG_ERROR([Invalid value for --with-included-regex: 
$with_included_regex])
     ;;


_______________________________________________
Bug-coreutils mailing list
Bug-coreutils@gnu.org
http://lists.gnu.org/mailman/listinfo/bug-coreutils

Reply via email to