New upstream version 2.2
This commit is contained in:
parent
ea115afa68
commit
c845af032a
101 changed files with 4649 additions and 22969 deletions
|
@ -21,7 +21,7 @@
|
|||
# the same distribution terms as the rest of that program.
|
||||
#
|
||||
# Generated by gnulib-tool.
|
||||
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files base64 crypto/sha1 dirname environ floorf fsusage getaddrinfo gethostname getloadavg getopt-gnu gettext idpriv-droptemp mountlist regex setenv strcase strsep timegm unsetenv vasprintf vsnprintf
|
||||
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files base64 crypto/sha1 dirname environ floorf fsusage getaddrinfo gethostname getloadavg getopt-gnu gettext idpriv-droptemp mountlist regex setenv strcase strcasestr strsep timegm unsetenv vasprintf vsnprintf
|
||||
|
||||
AUTOMAKE_OPTIONS = 1.9.6 gnits subdir-objects
|
||||
|
||||
|
@ -1553,6 +1553,15 @@ EXTRA_libgnu_a_SOURCES += strcasecmp.c strncasecmp.c
|
|||
|
||||
## end gnulib module strcase
|
||||
|
||||
## begin gnulib module strcasestr-simple
|
||||
|
||||
|
||||
EXTRA_DIST += str-two-way.h strcasestr.c
|
||||
|
||||
EXTRA_libgnu_a_SOURCES += strcasestr.c
|
||||
|
||||
## end gnulib module strcasestr-simple
|
||||
|
||||
## begin gnulib module streq
|
||||
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
# the same distribution terms as the rest of that program.
|
||||
#
|
||||
# Generated by gnulib-tool.
|
||||
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files base64 crypto/sha1 dirname environ floorf fsusage getaddrinfo gethostname getloadavg getopt-gnu gettext idpriv-droptemp mountlist regex setenv strcase strsep timegm unsetenv vasprintf vsnprintf
|
||||
# Reproduce by: gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files base64 crypto/sha1 dirname environ floorf fsusage getaddrinfo gethostname getloadavg getopt-gnu gettext idpriv-droptemp mountlist regex setenv strcase strcasestr strsep timegm unsetenv vasprintf vsnprintf
|
||||
|
||||
|
||||
|
||||
|
@ -155,6 +155,7 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/np_mysqlclient.m4 \
|
|||
$(top_srcdir)/gl/m4/stddef_h.m4 $(top_srcdir)/gl/m4/stdint.m4 \
|
||||
$(top_srcdir)/gl/m4/stdint_h.m4 $(top_srcdir)/gl/m4/stdio_h.m4 \
|
||||
$(top_srcdir)/gl/m4/stdlib_h.m4 $(top_srcdir)/gl/m4/strcase.m4 \
|
||||
$(top_srcdir)/gl/m4/strcasestr.m4 \
|
||||
$(top_srcdir)/gl/m4/strerror.m4 \
|
||||
$(top_srcdir)/gl/m4/string_h.m4 \
|
||||
$(top_srcdir)/gl/m4/strings_h.m4 \
|
||||
|
@ -1071,6 +1072,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
|
|||
PATH_SEPARATOR = @PATH_SEPARATOR@
|
||||
PATH_TO_APTGET = @PATH_TO_APTGET@
|
||||
PATH_TO_DIG = @PATH_TO_DIG@
|
||||
PATH_TO_ENV = @PATH_TO_ENV@
|
||||
PATH_TO_FPING = @PATH_TO_FPING@
|
||||
PATH_TO_FPING6 = @PATH_TO_FPING6@
|
||||
PATH_TO_LMSTAT = @PATH_TO_LMSTAT@
|
||||
|
@ -1088,6 +1090,7 @@ PATH_TO_SMBCLIENT = @PATH_TO_SMBCLIENT@
|
|||
PATH_TO_SNMPGET = @PATH_TO_SNMPGET@
|
||||
PATH_TO_SNMPGETNEXT = @PATH_TO_SNMPGETNEXT@
|
||||
PATH_TO_SSH = @PATH_TO_SSH@
|
||||
PATH_TO_SUDO = @PATH_TO_SUDO@
|
||||
PATH_TO_SWAP = @PATH_TO_SWAP@
|
||||
PATH_TO_SWAPINFO = @PATH_TO_SWAPINFO@
|
||||
PATH_TO_UPTIME = @PATH_TO_UPTIME@
|
||||
|
@ -1422,8 +1425,9 @@ EXTRA_DIST = m4/gnulib-cache.m4 alloca.in.h arpa_inet.in.h btowc.c \
|
|||
$(top_srcdir)/build-aux/snippet/c++defs.h \
|
||||
$(top_srcdir)/build-aux/snippet/warn-on-use.h snprintf.c \
|
||||
w32sock.h stdalign.in.h stdbool.in.h stddef.in.h stdint.in.h \
|
||||
stdio.in.h stdlib.in.h strcasecmp.c strncasecmp.c streq.h \
|
||||
strerror.c strerror-override.c strerror-override.h string.in.h \
|
||||
stdio.in.h stdlib.in.h strcasecmp.c strncasecmp.c \
|
||||
str-two-way.h strcasestr.c streq.h strerror.c \
|
||||
strerror-override.c strerror-override.h string.in.h \
|
||||
strings.in.h strndup.c strnlen.c strsep.c str-two-way.h \
|
||||
strstr.c sys_socket.in.h sys_types.in.h sys_uio.in.h \
|
||||
$(top_srcdir)/build-aux/config.rpath time.in.h time_r.c \
|
||||
|
@ -1483,10 +1487,10 @@ EXTRA_libgnu_a_SOURCES = btowc.c stripslash.c error.c float.c itold.c \
|
|||
mbtowc.c memchr.c mktime.c mktime.c mountlist.c msvc-inval.c \
|
||||
msvc-nothrow.c nl_langinfo.c read.c regcomp.c regex.c \
|
||||
regex_internal.c regexec.c setenv.c snprintf.c strcasecmp.c \
|
||||
strncasecmp.c strerror.c strerror-override.c strndup.c \
|
||||
strnlen.c strsep.c strstr.c time_r.c timegm.c unsetenv.c \
|
||||
asnprintf.c printf-args.c printf-parse.c vasnprintf.c \
|
||||
asprintf.c vasprintf.c vsnprintf.c wcrtomb.c
|
||||
strncasecmp.c strcasestr.c strerror.c strerror-override.c \
|
||||
strndup.c strnlen.c strsep.c strstr.c time_r.c timegm.c \
|
||||
unsetenv.c asnprintf.c printf-args.c printf-parse.c \
|
||||
vasnprintf.c asprintf.c vasprintf.c vsnprintf.c wcrtomb.c
|
||||
charset_alias = $(DESTDIR)$(libdir)/charset.alias
|
||||
charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
|
||||
|
||||
|
@ -1620,6 +1624,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/snprintf.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockets.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasecmp.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strcasestr.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror-override.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stripslash.Po@am__quote@
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
|
||||
|
||||
# Specification in the form of a command-line invocation:
|
||||
# gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files base64 crypto/sha1 dirname environ floorf fsusage getaddrinfo gethostname getloadavg getopt-gnu gettext idpriv-droptemp mountlist regex setenv strcase strsep timegm unsetenv vasprintf vsnprintf
|
||||
# gnulib-tool --import --dir=. --lib=libgnu --source-base=gl --m4-base=gl/m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl --no-vc-files base64 crypto/sha1 dirname environ floorf fsusage getaddrinfo gethostname getloadavg getopt-gnu gettext idpriv-droptemp mountlist regex setenv strcase strcasestr strsep timegm unsetenv vasprintf vsnprintf
|
||||
|
||||
# Specification in the form of a few gnulib-tool.m4 macro invocations:
|
||||
gl_LOCAL_DIR([])
|
||||
|
@ -48,6 +48,7 @@ gl_MODULES([
|
|||
regex
|
||||
setenv
|
||||
strcase
|
||||
strcasestr
|
||||
strsep
|
||||
timegm
|
||||
unsetenv
|
||||
|
|
|
@ -121,6 +121,8 @@ AC_DEFUN([gl_EARLY],
|
|||
# Code from module stdio:
|
||||
# Code from module stdlib:
|
||||
# Code from module strcase:
|
||||
# Code from module strcasestr:
|
||||
# Code from module strcasestr-simple:
|
||||
# Code from module streq:
|
||||
# Code from module strerror:
|
||||
# Code from module strerror-override:
|
||||
|
@ -390,6 +392,17 @@ AC_DEFUN([gl_INIT],
|
|||
AC_LIBOBJ([strncasecmp])
|
||||
gl_PREREQ_STRNCASECMP
|
||||
fi
|
||||
gl_FUNC_STRCASESTR
|
||||
if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then
|
||||
AC_LIBOBJ([strcasestr])
|
||||
gl_PREREQ_STRCASESTR
|
||||
fi
|
||||
gl_FUNC_STRCASESTR_SIMPLE
|
||||
if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then
|
||||
AC_LIBOBJ([strcasestr])
|
||||
gl_PREREQ_STRCASESTR
|
||||
fi
|
||||
gl_STRING_MODULE_INDICATOR([strcasestr])
|
||||
gl_FUNC_STRERROR
|
||||
if test $REPLACE_STRERROR = 1; then
|
||||
AC_LIBOBJ([strerror])
|
||||
|
@ -723,6 +736,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
lib/stdlib.in.h
|
||||
lib/str-two-way.h
|
||||
lib/strcasecmp.c
|
||||
lib/strcasestr.c
|
||||
lib/streq.h
|
||||
lib/strerror-override.c
|
||||
lib/strerror-override.h
|
||||
|
@ -866,6 +880,7 @@ AC_DEFUN([gl_FILE_LIST], [
|
|||
m4/stdio_h.m4
|
||||
m4/stdlib_h.m4
|
||||
m4/strcase.m4
|
||||
m4/strcasestr.m4
|
||||
m4/strerror.m4
|
||||
m4/string_h.m4
|
||||
m4/strings_h.m4
|
||||
|
|
142
gl/m4/strcasestr.m4
Normal file
142
gl/m4/strcasestr.m4
Normal file
|
@ -0,0 +1,142 @@
|
|||
# strcasestr.m4 serial 21
|
||||
dnl Copyright (C) 2005, 2007-2013 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
dnl gives unlimited permission to copy and/or distribute it,
|
||||
dnl with or without modifications, as long as this notice is preserved.
|
||||
|
||||
dnl Check that strcasestr is present and works.
|
||||
AC_DEFUN([gl_FUNC_STRCASESTR_SIMPLE],
|
||||
[
|
||||
AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
|
||||
|
||||
dnl Persuade glibc <string.h> to declare strcasestr().
|
||||
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
|
||||
|
||||
AC_REQUIRE([gl_FUNC_MEMCHR])
|
||||
AC_CHECK_FUNCS([strcasestr])
|
||||
if test $ac_cv_func_strcasestr = no; then
|
||||
HAVE_STRCASESTR=0
|
||||
else
|
||||
if test "$gl_cv_func_memchr_works" != yes; then
|
||||
REPLACE_STRCASESTR=1
|
||||
else
|
||||
dnl Detect http://sourceware.org/bugzilla/show_bug.cgi?id=12092.
|
||||
AC_CACHE_CHECK([whether strcasestr works],
|
||||
[gl_cv_func_strcasestr_works_always],
|
||||
[AC_RUN_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <string.h> /* for strcasestr */
|
||||
#define P "_EF_BF_BD"
|
||||
#define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P
|
||||
#define NEEDLE P P P P P
|
||||
]], [[return !!strcasestr (HAYSTACK, NEEDLE);
|
||||
]])],
|
||||
[gl_cv_func_strcasestr_works_always=yes],
|
||||
[gl_cv_func_strcasestr_works_always=no],
|
||||
[dnl glibc 2.12 and cygwin 1.7.7 have a known bug. uClibc is not
|
||||
dnl affected, since it uses different source code for strcasestr
|
||||
dnl than glibc.
|
||||
dnl Assume that it works on all other platforms, even if it is not
|
||||
dnl linear.
|
||||
AC_EGREP_CPP([Lucky user],
|
||||
[
|
||||
#ifdef __GNU_LIBRARY__
|
||||
#include <features.h>
|
||||
#if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \
|
||||
|| defined __UCLIBC__
|
||||
Lucky user
|
||||
#endif
|
||||
#elif defined __CYGWIN__
|
||||
#include <cygwin/version.h>
|
||||
#if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7)
|
||||
Lucky user
|
||||
#endif
|
||||
#else
|
||||
Lucky user
|
||||
#endif
|
||||
],
|
||||
[gl_cv_func_strcasestr_works_always="guessing yes"],
|
||||
[gl_cv_func_strcasestr_works_always="guessing no"])
|
||||
])
|
||||
])
|
||||
case "$gl_cv_func_strcasestr_works_always" in
|
||||
*yes) ;;
|
||||
*)
|
||||
REPLACE_STRCASESTR=1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
fi
|
||||
]) # gl_FUNC_STRCASESTR_SIMPLE
|
||||
|
||||
dnl Additionally, check that strcasestr is efficient.
|
||||
AC_DEFUN([gl_FUNC_STRCASESTR],
|
||||
[
|
||||
AC_REQUIRE([gl_FUNC_STRCASESTR_SIMPLE])
|
||||
if test $HAVE_STRCASESTR = 1 && test $REPLACE_STRCASESTR = 0; then
|
||||
AC_CACHE_CHECK([whether strcasestr works in linear time],
|
||||
[gl_cv_func_strcasestr_linear],
|
||||
[AC_RUN_IFELSE([AC_LANG_PROGRAM([[
|
||||
#include <signal.h> /* for signal */
|
||||
#include <string.h> /* for strcasestr */
|
||||
#include <stdlib.h> /* for malloc */
|
||||
#include <unistd.h> /* for alarm */
|
||||
static void quit (int sig) { exit (sig + 128); }
|
||||
]], [[
|
||||
int result = 0;
|
||||
size_t m = 1000000;
|
||||
char *haystack = (char *) malloc (2 * m + 2);
|
||||
char *needle = (char *) malloc (m + 2);
|
||||
/* Failure to compile this test due to missing alarm is okay,
|
||||
since all such platforms (mingw) also lack strcasestr. */
|
||||
signal (SIGALRM, quit);
|
||||
alarm (5);
|
||||
/* Check for quadratic performance. */
|
||||
if (haystack && needle)
|
||||
{
|
||||
memset (haystack, 'A', 2 * m);
|
||||
haystack[2 * m] = 'B';
|
||||
haystack[2 * m + 1] = 0;
|
||||
memset (needle, 'A', m);
|
||||
needle[m] = 'B';
|
||||
needle[m + 1] = 0;
|
||||
if (!strcasestr (haystack, needle))
|
||||
result |= 1;
|
||||
}
|
||||
return result;
|
||||
]])],
|
||||
[gl_cv_func_strcasestr_linear=yes], [gl_cv_func_strcasestr_linear=no],
|
||||
[dnl Only glibc > 2.12 and cygwin > 1.7.7 are known to have a
|
||||
dnl strcasestr that works in linear time.
|
||||
AC_EGREP_CPP([Lucky user],
|
||||
[
|
||||
#include <features.h>
|
||||
#ifdef __GNU_LIBRARY__
|
||||
#if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \
|
||||
&& !defined __UCLIBC__
|
||||
Lucky user
|
||||
#endif
|
||||
#endif
|
||||
#ifdef __CYGWIN__
|
||||
#include <cygwin/version.h>
|
||||
#if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7)
|
||||
Lucky user
|
||||
#endif
|
||||
#endif
|
||||
],
|
||||
[gl_cv_func_strcasestr_linear="guessing yes"],
|
||||
[gl_cv_func_strcasestr_linear="guessing no"])
|
||||
])
|
||||
])
|
||||
case "$gl_cv_func_strcasestr_linear" in
|
||||
*yes) ;;
|
||||
*)
|
||||
REPLACE_STRCASESTR=1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
]) # gl_FUNC_STRCASESTR
|
||||
|
||||
# Prerequisites of lib/strcasestr.c.
|
||||
AC_DEFUN([gl_PREREQ_STRCASESTR], [
|
||||
:
|
||||
])
|
82
gl/strcasestr.c
Normal file
82
gl/strcasestr.c
Normal file
|
@ -0,0 +1,82 @@
|
|||
/* Case-insensitive searching in a string.
|
||||
Copyright (C) 2005-2013 Free Software Foundation, Inc.
|
||||
Written by Bruno Haible <bruno@clisp.org>, 2005.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 3, or (at your option)
|
||||
any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, see <http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
/* Specification. */
|
||||
#include <string.h>
|
||||
|
||||
#include <ctype.h>
|
||||
#include <stdbool.h>
|
||||
#include <strings.h>
|
||||
|
||||
#define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch))
|
||||
|
||||
/* Two-Way algorithm. */
|
||||
#define RETURN_TYPE char *
|
||||
#define AVAILABLE(h, h_l, j, n_l) \
|
||||
(!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \
|
||||
&& ((h_l) = (j) + (n_l)))
|
||||
#define CANON_ELEMENT(c) TOLOWER (c)
|
||||
#define CMP_FUNC(p1, p2, l) \
|
||||
strncasecmp ((const char *) (p1), (const char *) (p2), l)
|
||||
#include "str-two-way.h"
|
||||
|
||||
/* Find the first occurrence of NEEDLE in HAYSTACK, using
|
||||
case-insensitive comparison. This function gives unspecified
|
||||
results in multibyte locales. */
|
||||
char *
|
||||
strcasestr (const char *haystack_start, const char *needle_start)
|
||||
{
|
||||
const char *haystack = haystack_start;
|
||||
const char *needle = needle_start;
|
||||
size_t needle_len; /* Length of NEEDLE. */
|
||||
size_t haystack_len; /* Known minimum length of HAYSTACK. */
|
||||
bool ok = true; /* True if NEEDLE is prefix of HAYSTACK. */
|
||||
|
||||
/* Determine length of NEEDLE, and in the process, make sure
|
||||
HAYSTACK is at least as long (no point processing all of a long
|
||||
NEEDLE if HAYSTACK is too short). */
|
||||
while (*haystack && *needle)
|
||||
{
|
||||
ok &= (TOLOWER ((unsigned char) *haystack)
|
||||
== TOLOWER ((unsigned char) *needle));
|
||||
haystack++;
|
||||
needle++;
|
||||
}
|
||||
if (*needle)
|
||||
return NULL;
|
||||
if (ok)
|
||||
return (char *) haystack_start;
|
||||
needle_len = needle - needle_start;
|
||||
haystack = haystack_start + 1;
|
||||
haystack_len = needle_len - 1;
|
||||
|
||||
/* Perform the search. Abstract memory is considered to be an array
|
||||
of 'unsigned char' values, not an array of 'char' values. See
|
||||
ISO C 99 section 6.2.6.1. */
|
||||
if (needle_len < LONG_NEEDLE_THRESHOLD)
|
||||
return two_way_short_needle ((const unsigned char *) haystack,
|
||||
haystack_len,
|
||||
(const unsigned char *) needle_start,
|
||||
needle_len);
|
||||
return two_way_long_needle ((const unsigned char *) haystack, haystack_len,
|
||||
(const unsigned char *) needle_start,
|
||||
needle_len);
|
||||
}
|
||||
|
||||
#undef LONG_NEEDLE_THRESHOLD
|
Loading…
Add table
Add a link
Reference in a new issue