00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "setup.h"
00025
00026 #include <string.h>
00027 #include <ctype.h>
00028
00029 #ifdef HAVE_STRINGS_H
00030 #include <strings.h>
00031 #endif
00032
00033 #include "strequal.h"
00034
00035 #if defined(HAVE_STRCASECMP) && defined(__STRICT_ANSI__)
00036
00037 extern int (strcasecmp)(const char *s1, const char *s2);
00038 extern int (strncasecmp)(const char *s1, const char *s2, size_t n);
00039 #endif
00040
00041 int curl_strequal(const char *first, const char *second)
00042 {
00043 #if defined(HAVE_STRCASECMP)
00044 return !(strcasecmp)(first, second);
00045 #elif defined(HAVE_STRCMPI)
00046 return !(strcmpi)(first, second);
00047 #elif defined(HAVE_STRICMP)
00048 return !(stricmp)(first, second);
00049 #else
00050 while (*first && *second) {
00051 if (toupper(*first) != toupper(*second)) {
00052 break;
00053 }
00054 first++;
00055 second++;
00056 }
00057 return toupper(*first) == toupper(*second);
00058 #endif
00059 }
00060
00061 int curl_strnequal(const char *first, const char *second, size_t max)
00062 {
00063 #if defined(HAVE_STRCASECMP)
00064 return !strncasecmp(first, second, max);
00065 #elif defined(HAVE_STRCMPI)
00066 return !strncmpi(first, second, max);
00067 #elif defined(HAVE_STRICMP)
00068 return !strnicmp(first, second, max);
00069 #else
00070 while (*first && *second && max) {
00071 if (toupper(*first) != toupper(*second)) {
00072 break;
00073 }
00074 max--;
00075 first++;
00076 second++;
00077 }
00078 if(0 == max)
00079 return 1;
00080
00081 return toupper(*first) == toupper(*second);
00082 #endif
00083 }
00084
00085
00086
00087
00088
00089
00090
00091 char *Curl_strcasestr(const char *haystack, const char *needle)
00092 {
00093 size_t nlen = strlen(needle);
00094 size_t hlen = strlen(haystack);
00095
00096 while(hlen-- >= nlen) {
00097 if(curl_strnequal(haystack, needle, nlen))
00098 return (char *)haystack;
00099 haystack++;
00100 }
00101 return NULL;
00102 }
00103
00104 #ifndef HAVE_STRLCAT
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118 size_t Curl_strlcat(char *dst, const char *src, size_t siz)
00119 {
00120 char *d = dst;
00121 const char *s = src;
00122 size_t n = siz;
00123 size_t dlen;
00124
00125
00126 while (n-- != 0 && *d != '\0')
00127 d++;
00128 dlen = d - dst;
00129 n = siz - dlen;
00130
00131 if (n == 0)
00132 return(dlen + strlen(s));
00133 while (*s != '\0') {
00134 if (n != 1) {
00135 *d++ = *s;
00136 n--;
00137 }
00138 s++;
00139 }
00140 *d = '\0';
00141
00142 return(dlen + (s - src));
00143 }
00144 #endif