changeset 8073:eaa00773406b

Avoid mempcpy in the regex code, as the string.h mempcpy stuff is causing more trouble than it's curing. * lib/regex_internal.h (__mempcpy): Remove. * lib/regcomp.c (regerror): Rewrite to avoid the need for mempcpy (and make the code a tad smaller to boot). * m4/regex.m4 (gl_PREREQ_REGEX): Don't check for mempcpy.
author Paul Eggert <eggert@cs.ucla.edu>
date Fri, 02 Feb 2007 22:15:43 +0000
parents c31253d5c505
children 2700fc6b6734
files ChangeLog lib/regcomp.c lib/regex_internal.h m4/regex.m4
diffstat 4 files changed, 15 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2007-02-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Avoid mempcpy in the regex code, as the string.h mempcpy stuff
+	is causing more trouble than it's curing.
+	* lib/regex_internal.h (__mempcpy): Remove.
+	* lib/regcomp.c (regerror): Rewrite to avoid the need for mempcpy
+	(and make the code a tad smaller to boot).
+	* m4/regex.m4 (gl_PREREQ_REGEX): Don't check for mempcpy.
+
 2007-02-02  Jim Meyering  <jim@meyering.net>
 
 	* modules/arpa_inet: Put AC_PROG_MKDIR_P in the configure.ac:
--- a/lib/regcomp.c
+++ b/lib/regcomp.c
@@ -542,17 +542,13 @@
 
   if (BE (errbuf_size != 0, 1))
     {
+      size_t cpy_size = msg_size;
       if (BE (msg_size > errbuf_size, 0))
 	{
-#if defined HAVE_MEMPCPY || defined _LIBC
-	  *((char *) __mempcpy (errbuf, msg, errbuf_size - 1)) = '\0';
-#else
-	  memcpy (errbuf, msg, errbuf_size - 1);
-	  errbuf[errbuf_size - 1] = 0;
-#endif
+	  cpy_size = errbuf_size - 1;
+	  errbuf[cpy_size] = '\0';
 	}
-      else
-	memcpy (errbuf, msg, msg_size);
+      memcpy (errbuf, msg, cpy_size);
     }
 
   return msg_size;
--- a/lib/regex_internal.h
+++ b/lib/regex_internal.h
@@ -112,10 +112,6 @@
 # define __wctype wctype
 # define __iswctype iswctype
 # define __btowc btowc
-# ifndef __mempcpy
-#  undef mempcpy
-#  define __mempcpy mempcpy
-# endif
 # define __wcrtomb wcrtomb
 # define __regfree regfree
 # define attribute_hidden
--- a/m4/regex.m4
+++ b/m4/regex.m4
@@ -1,4 +1,4 @@
-#serial 42
+#serial 43
 
 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
 # 2006, 2007 Free Software Foundation, Inc.
@@ -193,6 +193,6 @@
   AC_REQUIRE([AC_GNU_SOURCE])
   AC_REQUIRE([AC_C_RESTRICT])
   AC_REQUIRE([AM_LANGINFO_CODESET])
-  AC_CHECK_FUNCS_ONCE([iswctype mbrtowc mempcpy wcrtomb wcscoll])
+  AC_CHECK_FUNCS_ONCE([iswctype mbrtowc wcrtomb wcscoll])
   AC_CHECK_DECLS([isblank], [], [], [#include <ctype.h>])
 ])