From f7328f9d0aed9f61e4f38b731ac9fa88a3c55622 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Fri, 2 Feb 2007 22:15:43 +0000 Subject: [PATCH] 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. --- ChangeLog | 9 +++++++++ lib/regcomp.c | 12 ++++-------- lib/regex_internal.h | 4 ---- m4/regex.m4 | 4 ++-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 23710561c..ec527f6eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2007-02-02 Paul Eggert + + 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 * modules/arpa_inet: Put AC_PROG_MKDIR_P in the configure.ac: diff --git a/lib/regcomp.c b/lib/regcomp.c index 6f1b76913..6546be47e 100644 --- a/lib/regcomp.c +++ b/lib/regcomp.c @@ -542,17 +542,13 @@ regerror (int errcode, const regex_t *_Restrict_ preg, 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; diff --git a/lib/regex_internal.h b/lib/regex_internal.h index 50d6b05e6..a19c9a7fa 100644 --- 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 diff --git a/m4/regex.m4 b/m4/regex.m4 index 25da645e1..e5c6e974a 100644 --- 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_DEFUN([gl_PREREQ_REGEX], 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 ]) ]) -- 2.11.0