From: Peter van Dijk Date: Fri, 4 Jan 2013 13:35:38 +0000 (+0000) Subject: strcasestr does not exist on Solaris. Juraj Lutter provided configure patches plus... X-Git-Tag: auth-3.2-rc4~8 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=283276d3954c8601a5e324d02dcbed622c5472be;p=thirdparty%2Fpdns.git strcasestr does not exist on Solaris. Juraj Lutter provided configure patches plus a portable implementation git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@3020 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/configure.ac b/configure.ac index 3fd969faac..b495ba4851 100644 --- a/configure.ac +++ b/configure.ac @@ -80,7 +80,7 @@ AC_STRUCT_TM dnl Checks for library functions. AC_TYPE_SIGNAL -AC_CHECK_FUNCS(gethostname gettimeofday mkdir mktime select socket strerror) +AC_CHECK_FUNCS(gethostname gettimeofday mkdir mktime select socket strerror strcasestr) # Check for libdl diff --git a/pdns/json.cc b/pdns/json.cc index 5d52d85627..2f35046009 100644 --- a/pdns/json.cc +++ b/pdns/json.cc @@ -9,6 +9,51 @@ #include "rapidjson/document.h" #include "rapidjson/stringbuffer.h" #include "rapidjson/writer.h" +#include "config.h" +#include +#include +#include + +#ifndef HAVE_STRCASESTR + +/* + * strcasestr() locates the first occurrence in the string s1 of the + * sequence of characters (excluding the terminating null character) + * in the string s2, ignoring case. strcasestr() returns a pointer + * to the located string, or a null pointer if the string is not found. + * If s2 is empty, the function returns s1. + */ + +static char * +strcasestr(const char *s1, const char *s2) +{ + int *cm = __trans_lower; + const uchar_t *us1 = (const uchar_t *)s1; + const uchar_t *us2 = (const uchar_t *)s2; + const uchar_t *tptr; + int c; + + if (us2 == NULL || *us2 == '\0') + return ((char *)us1); + + c = cm[*us2]; + while (*us1 != '\0') { + if (c == cm[*us1++]) { + tptr = us1; + while (cm[c = *++us2] == cm[*us1++] && c != '\0') + continue; + if (c == '\0') + return ((char *)tptr - 1); + us1 = tptr; + us2 = (const uchar_t *)s2; + c = cm[*us2]; + } + } + + return (NULL); +} + +#endif // HAVE_STRCASESTR using namespace rapidjson;