mirror of
https://git.savannah.gnu.org/git/gnulib.git
synced 2025-08-17 12:41:05 +03:00
strstr, strcasestr: replace on platforms with broken memchr
* modules/strstr: Split into... * modules/strstr-simple: ...new module that does not care about performance, but does care about glibc bug. * m4/strstr.m4 (gl_FUNC_STRSTR): Split... (gl_FUNC_STRSTR_SIMPLE): ...into new macro, which replaces strstr if platform memchr is broken, per Debian bug 521737. * m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): React to broken memchr. * m4/memchr.m4 (gl_FUNC_MEMCHR): Only expand once. * doc/posix-functions/strstr.texi (strstr): Document the fix. * doc/glibc-functions/strcasestr.texi (strcasestr): Likewise. * modules/mountlist (Depends-on): Add strstr-simple. * modules/gen-uni-tables (Depends-on): Likewise. * modules/argz (Depends-on): Add strstr. Signed-off-by: Eric Blake <ebb9@byu.net>
This commit is contained in:
18
ChangeLog
18
ChangeLog
@@ -1,3 +1,21 @@
|
|||||||
|
2009-06-17 Eric Blake <ebb9@byu.net>
|
||||||
|
|
||||||
|
strstr, strcasestr: replace on platforms with broken memchr
|
||||||
|
* modules/strstr: Split into...
|
||||||
|
* modules/strstr-simple: ...new module that does not care about
|
||||||
|
performance, but does care about glibc bug.
|
||||||
|
* m4/strstr.m4 (gl_FUNC_STRSTR): Split...
|
||||||
|
(gl_FUNC_STRSTR_SIMPLE): ...into new macro, which replaces strstr
|
||||||
|
if platform memchr is broken, per Debian bug 521737.
|
||||||
|
* m4/strcasestr.m4 (gl_FUNC_STRCASESTR_SIMPLE): React to broken
|
||||||
|
memchr.
|
||||||
|
* m4/memchr.m4 (gl_FUNC_MEMCHR): Only expand once.
|
||||||
|
* doc/posix-functions/strstr.texi (strstr): Document the fix.
|
||||||
|
* doc/glibc-functions/strcasestr.texi (strcasestr): Likewise.
|
||||||
|
* modules/mountlist (Depends-on): Add strstr-simple.
|
||||||
|
* modules/gen-uni-tables (Depends-on): Likewise.
|
||||||
|
* modules/argz (Depends-on): Add strstr.
|
||||||
|
|
||||||
2009-06-17 Bruno Haible <bruno@clisp.org>
|
2009-06-17 Bruno Haible <bruno@clisp.org>
|
||||||
|
|
||||||
* modules/posix_spawn-internal (Depends-on): Add errno.
|
* modules/posix_spawn-internal (Depends-on): Add errno.
|
||||||
|
@@ -9,7 +9,12 @@ or @code{strcasestr}:
|
|||||||
@itemize
|
@itemize
|
||||||
@item
|
@item
|
||||||
This function is missing on some platforms:
|
This function is missing on some platforms:
|
||||||
AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, BeOS.
|
AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x,
|
||||||
|
mingw, BeOS.
|
||||||
|
|
||||||
|
@item
|
||||||
|
This function can trigger memchr bugs on some platforms:
|
||||||
|
glibc 2.10.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
Portability problems fixed by Gnulib module @code{strcasestr}:
|
Portability problems fixed by Gnulib module @code{strcasestr}:
|
||||||
|
@@ -4,14 +4,23 @@
|
|||||||
|
|
||||||
POSIX specification: @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strstr.html}
|
POSIX specification: @url{http://www.opengroup.org/onlinepubs/9699919799/functions/strstr.html}
|
||||||
|
|
||||||
Gnulib module: strstr
|
Gnulib module: strstr or strstr-simple
|
||||||
|
|
||||||
Portability problems fixed by Gnulib:
|
Portability problems fixed by either Gnulib module @code{strstr-simple}
|
||||||
|
or @code{strstr}:
|
||||||
|
@itemize
|
||||||
|
@item
|
||||||
|
This function can trigger memchr bugs on some platforms:
|
||||||
|
glibc 2.10.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
Portability problems fixed by Gnulib @code{strstr}:
|
||||||
@itemize
|
@itemize
|
||||||
@item
|
@item
|
||||||
This function has quadratic instead of linear worst-case complexity on some
|
This function has quadratic instead of linear worst-case complexity on some
|
||||||
platforms:
|
platforms:
|
||||||
glibc 2.8, MacOS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw.
|
glibc 2.8, MacOS X 10.3, FreeBSD 6.2, NetBSD 3.0, OpenBSD 4.0, AIX
|
||||||
|
5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
Portability problems not fixed by Gnulib:
|
Portability problems not fixed by Gnulib:
|
||||||
|
@@ -1,10 +1,10 @@
|
|||||||
# memchr.m4 serial 6
|
# memchr.m4 serial 7
|
||||||
dnl Copyright (C) 2002, 2003, 2004, 2009 Free Software Foundation, Inc.
|
dnl Copyright (C) 2002, 2003, 2004, 2009 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
dnl with or without modifications, as long as this notice is preserved.
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
AC_DEFUN([gl_FUNC_MEMCHR],
|
AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
|
||||||
[
|
[
|
||||||
dnl Check for prerequisites for memory fence checks.
|
dnl Check for prerequisites for memory fence checks.
|
||||||
gl_FUNC_MMAP_ANON
|
gl_FUNC_MMAP_ANON
|
||||||
|
@@ -1,20 +1,25 @@
|
|||||||
# strcasestr.m4 serial 12
|
# strcasestr.m4 serial 13
|
||||||
dnl Copyright (C) 2005, 2007, 2008 Free Software Foundation, Inc.
|
dnl Copyright (C) 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
dnl with or without modifications, as long as this notice is preserved.
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
dnl Check that strcasestr is present.
|
dnl Check that strcasestr is present and works.
|
||||||
AC_DEFUN([gl_FUNC_STRCASESTR_SIMPLE],
|
AC_DEFUN([gl_FUNC_STRCASESTR_SIMPLE],
|
||||||
[
|
[
|
||||||
dnl Persuade glibc <string.h> to declare strcasestr().
|
dnl Persuade glibc <string.h> to declare strcasestr().
|
||||||
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
|
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
|
||||||
|
|
||||||
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
|
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
|
||||||
|
AC_REQUIRE([gl_FUNC_MEMCHR])
|
||||||
AC_REPLACE_FUNCS([strcasestr])
|
AC_REPLACE_FUNCS([strcasestr])
|
||||||
if test $ac_cv_func_strcasestr = no; then
|
if test $ac_cv_func_strcasestr = no; then
|
||||||
HAVE_STRCASESTR=0
|
HAVE_STRCASESTR=0
|
||||||
gl_PREREQ_STRCASESTR
|
gl_PREREQ_STRCASESTR
|
||||||
|
elif test "$gl_cv_func_memchr_works" != yes; then
|
||||||
|
REPLACE_STRCASESTR=1
|
||||||
|
AC_LIBOBJ([strcasestr])
|
||||||
|
gl_PREREQ_STRCASESTR
|
||||||
fi
|
fi
|
||||||
]) # gl_FUNC_STRCASESTR_SIMPLE
|
]) # gl_FUNC_STRCASESTR_SIMPLE
|
||||||
|
|
||||||
|
19
m4/strstr.m4
19
m4/strstr.m4
@@ -1,13 +1,24 @@
|
|||||||
# strstr.m4 serial 5
|
# strstr.m4 serial 6
|
||||||
dnl Copyright (C) 2008 Free Software Foundation, Inc.
|
dnl Copyright (C) 2008, 2009 Free Software Foundation, Inc.
|
||||||
dnl This file is free software; the Free Software Foundation
|
dnl This file is free software; the Free Software Foundation
|
||||||
dnl gives unlimited permission to copy and/or distribute it,
|
dnl gives unlimited permission to copy and/or distribute it,
|
||||||
dnl with or without modifications, as long as this notice is preserved.
|
dnl with or without modifications, as long as this notice is preserved.
|
||||||
|
|
||||||
dnl Check that strstr is efficient.
|
dnl Check that strstr works.
|
||||||
AC_DEFUN([gl_FUNC_STRSTR],
|
AC_DEFUN([gl_FUNC_STRSTR_SIMPLE],
|
||||||
[
|
[
|
||||||
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
|
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
|
||||||
|
AC_REQUIRE([gl_FUNC_MEMCHR])
|
||||||
|
if test "$gl_cv_func_memchr_works" != yes; then
|
||||||
|
REPLACE_STRSTR=1
|
||||||
|
AC_LIBOBJ([strstr])
|
||||||
|
fi
|
||||||
|
]) # gl_FUNC_STRSTR_SIMPLE
|
||||||
|
|
||||||
|
dnl Additionally, check that strstr is efficient.
|
||||||
|
AC_DEFUN([gl_FUNC_STRSTR],
|
||||||
|
[
|
||||||
|
AC_REQUIRE([gl_FUNC_STRSTR_SIMPLE])
|
||||||
AC_CACHE_CHECK([whether strstr works in linear time],
|
AC_CACHE_CHECK([whether strstr works in linear time],
|
||||||
[gl_cv_func_strstr_linear],
|
[gl_cv_func_strstr_linear],
|
||||||
[AC_RUN_IFELSE([AC_LANG_PROGRAM([[
|
[AC_RUN_IFELSE([AC_LANG_PROGRAM([[
|
||||||
|
@@ -12,6 +12,7 @@ mempcpy
|
|||||||
stpcpy
|
stpcpy
|
||||||
strndup
|
strndup
|
||||||
strnlen
|
strnlen
|
||||||
|
strstr
|
||||||
|
|
||||||
configure.ac:
|
configure.ac:
|
||||||
gl_FUNC_ARGZ
|
gl_FUNC_ARGZ
|
||||||
|
@@ -10,6 +10,7 @@ lib/unictype/3levelbit.h
|
|||||||
Depends-on:
|
Depends-on:
|
||||||
memcmp
|
memcmp
|
||||||
strdup
|
strdup
|
||||||
|
strstr-simple
|
||||||
|
|
||||||
configure.ac:
|
configure.ac:
|
||||||
|
|
||||||
|
@@ -11,6 +11,7 @@ m4/mountlist.m4
|
|||||||
Depends-on:
|
Depends-on:
|
||||||
stdbool
|
stdbool
|
||||||
stdint
|
stdint
|
||||||
|
strstr-simple
|
||||||
xalloc
|
xalloc
|
||||||
|
|
||||||
configure.ac:
|
configure.ac:
|
||||||
|
@@ -2,19 +2,12 @@ Description:
|
|||||||
strstr() function: efficiently locate first substring in a buffer.
|
strstr() function: efficiently locate first substring in a buffer.
|
||||||
|
|
||||||
Files:
|
Files:
|
||||||
lib/str-two-way.h
|
|
||||||
lib/strstr.c
|
|
||||||
m4/strstr.m4
|
|
||||||
|
|
||||||
Depends-on:
|
Depends-on:
|
||||||
string
|
strstr-simple
|
||||||
stdbool
|
|
||||||
memchr
|
|
||||||
memcmp
|
|
||||||
|
|
||||||
configure.ac:
|
configure.ac:
|
||||||
gl_FUNC_STRSTR
|
gl_FUNC_STRSTR
|
||||||
gl_STRING_MODULE_INDICATOR([strstr])
|
|
||||||
|
|
||||||
Makefile.am:
|
Makefile.am:
|
||||||
|
|
||||||
|
28
modules/strstr-simple
Normal file
28
modules/strstr-simple
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
Description:
|
||||||
|
strstr() function: locate first substring in a buffer.
|
||||||
|
|
||||||
|
Files:
|
||||||
|
lib/str-two-way.h
|
||||||
|
lib/strstr.c
|
||||||
|
m4/strstr.m4
|
||||||
|
|
||||||
|
Depends-on:
|
||||||
|
string
|
||||||
|
stdbool
|
||||||
|
memchr
|
||||||
|
memcmp
|
||||||
|
|
||||||
|
configure.ac:
|
||||||
|
gl_FUNC_STRSTR_SIMPLE
|
||||||
|
gl_STRING_MODULE_INDICATOR([strstr])
|
||||||
|
|
||||||
|
Makefile.am:
|
||||||
|
|
||||||
|
Include:
|
||||||
|
<string.h>
|
||||||
|
|
||||||
|
License:
|
||||||
|
LGPLv2+
|
||||||
|
|
||||||
|
Maintainer:
|
||||||
|
all, Eric Blake
|
Reference in New Issue
Block a user