]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
[v9_9] add isc_string_strcasestr for portability
authorEvan Hunt <each@isc.org>
Fri, 10 Jan 2014 06:03:03 +0000 (22:03 -0800)
committerEvan Hunt <each@isc.org>
Fri, 10 Jan 2014 06:03:44 +0000 (22:03 -0800)
(cherry picked from commit 765ed22a844416f29253f5130548fef77f31881c)

configure
configure.in
lib/isc/include/isc/string.h
lib/isc/string.c
lib/isc/win32/libisc.def.in

index b69ba4d476433a27820cef514110768098ca03e4..ab2397bb7f4a17d8694bddee87550736a9b0c2b4 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# Copyright (C) 2004-2013  Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004-2014  Internet Systems Consortium, Inc. ("ISC")
 # Copyright (C) 1996-2003  Internet Software Consortium.
 #
 # Permission to use, copy, modify, and/or distribute this software for any
@@ -1229,6 +1229,7 @@ ISC_PLATFORM_NEEDVSNPRINTF
 LWRES_PLATFORM_NEEDSPRINTF
 ISC_PLATFORM_NEEDSPRINTF
 READLINE_LIB
+ISC_PLATFORM_NEEDSTRCASESTR
 ISC_PLATFORM_NEEDSTRLCAT
 ISC_PLATFORM_NEEDSTRLCPY
 GENRANDOMLIB
 
 
 
+ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr"
+if test "x$ac_cv_func_strcasestr" = xyes; then :
+  ISC_PLATFORM_NEEDSTRCASESTR="#undef ISC_PLATFORM_NEEDSTRCASESTR"
+else
+  ISC_PLATFORM_NEEDSTRCASESTR="#define ISC_PLATFORM_NEEDSTRCASESTR 1"
+fi
+
+
 
 
 
index a26792445171663a95a7d216ca201eaebb04074c..6b5435e18050bc78aa6a37d7768b44d5df8e1dfe 100644 (file)
@@ -2419,6 +2419,10 @@ AC_CHECK_FUNC(strlcat,
        [ISC_PLATFORM_NEEDSTRLCAT="#define ISC_PLATFORM_NEEDSTRLCAT 1"])
 AC_SUBST(ISC_PLATFORM_NEEDSTRLCAT)
 
+AC_CHECK_FUNC(strcasestr,
+       [ISC_PLATFORM_NEEDSTRCASESTR="#undef ISC_PLATFORM_NEEDSTRCASESTR"],
+       [ISC_PLATFORM_NEEDSTRCASESTR="#define ISC_PLATFORM_NEEDSTRCASESTR 1"])
+AC_SUBST(ISC_PLATFORM_NEEDSTRCASESTR)
 
 AC_SUBST(READLINE_LIB)
 AC_ARG_WITH(readline,
index b49fdbc327f15ee4a07f56d620f1ceb98f1a86ea..7d0a1cd4aae5a8ab566c85deeaa312f7e4d65d64 100644 (file)
@@ -226,6 +226,13 @@ isc_string_strlcat(char *dst, const char *src, size_t size);
 #define strlcat isc_string_strlcat
 #endif
 
+char *
+isc_string_strcasestr(const char *big, const char *little);
+
+#ifdef ISC_PLATFORM_NEEDSTRCASESTR
+#define strrcasestr isc_string_strrcasestr
+#endif
+
 ISC_LANG_ENDDECLS
 
 #endif /* ISC_STRING_H */
index a35f378b58654809a32bf193bb56ef3953e374a1..aa49e32fec0b5e393ad386c6e193d24b08e96fee 100644 (file)
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id$ */
+/*
+ * Copyright (c) 1990, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
 
 /*! \file */
 
@@ -269,3 +300,24 @@ isc_string_strlcat(char *dst, const char *src, size_t size)
 
        return(dlen + (s - src));       /* count does not include NUL */
 }
+
+char *
+isc_string_strcasestr(const char *str, const char *search) {
+       char c, sc, *s;
+       size_t len;
+
+       if ((c = *search++) != 0) {
+               c = tolower((unsigned char) c);
+               len = strlen(search);
+               do {
+                       do {
+                               if ((sc = *str++) == 0)
+                                       return (NULL);
+                       } while ((char) tolower((unsigned char) sc) != c);
+               } while (strncasecmp(str, search, len) != 0);
+               str--;
+       }
+       DE_CONST(str, s);
+       return (s);
+
+}
index 56c4c2545ffc5fe2a2303ee69053d5aa69e6ee64..4cc339cf7bffd4101bad0b9c6cfc966e0eb94c20 100644 (file)
@@ -546,6 +546,7 @@ isc_string_printf
 isc_string_printf_truncate
 isc_string_regiondup
 isc_string_separate
+isc_string_strcasestr
 isc_string_strlcat
 isc_string_strlcpy
 isc_string_touint64