[Top][All Lists]
[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 (®ex, 0, sizeof (regex));
- s = re_compile_pattern ("a[:@:>@:]b\n", 9, ®ex);
+ s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex);
/* 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 (®ex, 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, ®ex);
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])
;;