bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gnulib regex problem


From: Paul Eggert
Subject: Re: gnulib regex problem
Date: Sat, 25 Mar 2006 01:55:58 -0800
User-agent: Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux)

address@hidden 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  <address@hidden>

        * 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])
     ;;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]