changeset 6707:d0a48e08c98d

* 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.
author Paul Eggert <eggert@cs.ucla.edu>
date Fri, 17 Mar 2006 07:26:42 +0000
parents 8056b81ac71e
children 4333ccdc4d2f
files lib/ChangeLog lib/regex.h m4/ChangeLog m4/regex.m4
diffstat 4 files changed, 35 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,7 +1,13 @@
+2006-03-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* regex.h (regoff_t) [defined _REGEX_LARGE_OFFSETS]:
+	Typedef to long int, not to off_, as POSIX will likely change
+	in that direction.
+
 2006-03-13  Sergey Poznyakoff  <gray@gnu.org.ua>
 
 	* argp-help.c (validate_uparams): Fix typo
-	* argp-parse.c (argp_default_options): Consistently begin help 
+	* argp-parse.c (argp_default_options): Consistently begin help
 	messages with a lowercase letter.
 
 2006-03-11  Paul Eggert  <eggert@cs.ucla.edu>
--- a/lib/regex.h
+++ b/lib/regex.h
@@ -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 @@
 
 /* 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
--- a/m4/ChangeLog
+++ b/m4/ChangeLog
@@ -1,3 +1,14 @@
+2006-03-16  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* 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.
+
 2006-03-15  Eric Blake  <ebb9@byu.net>
 
 	* dirfd.m4 (gl_FUNC_DIRFD): Use AC_REQUIRE for AC_HEADER_DIRENT.
--- a/m4/regex.m4
+++ b/m4/regex.m4
@@ -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_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 @@
 	      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 @@
   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],