[EMAIL PROTECTED] writes: > I've noticed a problem in regex.m4; in gl_REGEX _REGEX_LARGE_OFFSETS is > defined, if gl_cv_type_off_t_switch = yes, regardless of the fact that > we are using the glibc api or the internal gnulib module. This breaks > when the user forces --without-included-regex and the glibc regoff_t is > an int, because the gnulib regex.h will typedef regoff_t to off_t (this > is a problem for the app using gnulib because the included regex.h is > always the internal gnulib one, since -I../gnulib/lib is in INCLUDES).
Thanks for reporting that. I installed the following patch into gnulib, which I hope fixes this problem (in a simpler way than the patch that you sent me), along with another issue due to anticipated changes to POSIX. I'll install it into coreutils shortly. If it doesn't solve your problem please let me know. 2006-03-16 Paul Eggert <[EMAIL PROTECTED]> * lib/regex.h (regoff_t) [defined _REGEX_LARGE_OFFSETS]: Typedef to long int, not to off_, as POSIX will likely change in that direction. * m4/regex.m4 (gl_REGEX): Don't check for off_t, since the code no longer needs it. Instead, check that regoff_t is as least as wide as ptrdiff_t. Don't define _REGEX_WIDE_OFFSETS unless using the included regex, so that our regex.h stays compatible with the installed regex. This is helpful for installers who configure --without-included-regex. Problem reported by Emanuele Giaquinta. Index: lib/regex.h =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/regex.h,v retrieving revision 1.34 diff -p -u -r1.34 regex.h --- lib/regex.h 31 Aug 2005 22:51:10 -0000 1.34 +++ lib/regex.h 17 Mar 2006 07:20:38 -0000 @@ -1,6 +1,6 @@ /* Definitions for data structures and routines for the regular expression library. - Copyright (C) 1985,1989-93,1995-98,2000,2001,2002,2003,2005 + Copyright (C) 1985,1989-93,1995-98,2000,2001,2002,2003,2005,2006 Free Software Foundation, Inc. This file is part of the GNU C Library. @@ -53,11 +53,13 @@ extern "C" { /* The type of the offset of a byte within a string. For historical reasons POSIX 1003.1-2004 requires that regoff_t be - at least as wide as off_t. This is a bit odd (and many common - POSIX platforms set it to the more-sensible ssize_t) but we might - as well conform. We don't know of any hosts where ssize_t is wider - than off_t, so off_t is safe. */ -typedef off_t regoff_t; + at least as wide as off_t. However, many common POSIX platforms set + regoff_t to the more-sensible ssize_t and the Open Group has + signalled its intention to change the requirement to be that + regoff_t be at least as wide as ptrdiff_t and ssize_t; see XBD ERN + 60 (2005-08-25). We don't know of any hosts where ssize_t or + ptrdiff_t is wider than long int, so long int is safe. */ +typedef long int regoff_t; /* The type of nonnegative object indexes. Traditionally, GNU regex uses 'int' for these. Code that uses __re_idx_t should work Index: m4/regex.m4 =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/regex.m4,v retrieving revision 1.47 diff -p -u -r1.47 regex.m4 --- m4/regex.m4 2 Dec 2005 00:30:09 -0000 1.47 +++ m4/regex.m4 17 Mar 2006 07:20:38 -0000 @@ -1,7 +1,7 @@ -#serial 31 +#serial 32 -# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005 Free -# Software Foundation, Inc. +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -14,31 +14,6 @@ AC_PREREQ([2.50]) AC_DEFUN([gl_REGEX], [ - AC_REQUIRE([AC_SYS_LARGEFILE]) dnl for a sufficently-wide off_t - - AC_CACHE_CHECK([whether off_t can be used in a switch statement], - [gl_cv_type_off_t_switch], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [AC_INCLUDES_DEFAULT], - [[off_t o = -1; - switch (o) - { - case -2: - return 1; - case -1: - return 2; - default: - return 0; - } - ]])], - [gl_cv_type_off_t_switch=yes], - [gl_cv_type_off_t_switch=no])]) - if test $gl_cv_type_off_t_switch = yes; then - AC_DEFINE([_REGEX_LARGE_OFFSETS], 1, - [Define if you want regoff_t to be at least as wide POSIX requires.]) - fi - AC_LIBSOURCES( [regcomp.c, regex.c, regex.h, regex_internal.c, regex_internal.h, regexec.c]) @@ -123,10 +98,10 @@ AC_DEFUN([gl_REGEX], exit (1); /* Reject hosts whose regoff_t values are too narrow. - These include glibc 2.3.5 on hosts with 64-bit off_t - and 32-bit int, and Solaris 10 on hosts with 32-bit int - and _FILE_OFFSET_BITS=64. */ - if (sizeof (regoff_t) < sizeof (off_t)) + 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)) exit (1); exit (0);]])], @@ -141,6 +116,8 @@ AC_DEFUN([gl_REGEX], esac if test $ac_use_included_regex = yes; then + AC_DEFINE([_REGEX_WIDE_OFFSETS], 1, + [Define if you want regoff_t to be at least as wide POSIX requires.]) AC_DEFINE([re_syntax_options], [rpl_re_syntax_options], [Define to rpl_re_syntax_options if the replacement should be used.]) AC_DEFINE([re_set_syntax], [rpl_re_set_syntax], _______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils