// // strcasecmp.cc // // strcasecmp: replacement of the strcasecmp functions for architectures that do // not have it. // // Part of the ht://Dig package // Copyright (c) 1999-2004 The ht://Dig Group // For copyright details, see the file COPYING in your distribution // or the GNU Library General Public License (LGPL) version 2 or later // // // $Id: strcasecmp.cc,v 1.10 2004/05/28 13:15:22 lha Exp $ // #ifdef HAVE_CONFIG_H #include "htconfig.h" #endif /* HAVE_CONFIG_H */ #include "lib.h" #include //***************************************************************************** // int mystrcasecmp(const char *str1, const char *str2) { if (!str1 && !str2) return 0; if (!str1) return 1; if (!str2) return -1; while (*str1 && *str2 && tolower((unsigned char)*str1) == tolower((unsigned char)*str2)) { str1++; str2++; } return tolower((unsigned char)*str1) - tolower((unsigned char)*str2); } //#define tolower(ch) (isupper(ch) ? (ch) + 'a' - 'A' : (ch)) //***************************************************************************** // int mystrncasecmp(const char *str1, const char *str2, int n) { if (!str1 && !str2) return 0; if (!str1) return 1; if (!str2) return -1; if (n < 0) return 0; while (n && *str1 && *str2 && tolower((unsigned char)*str1) == tolower((unsigned char)*str2)) { str1++; str2++; n--; } return n == 0 ? 0 : tolower((unsigned char)*str1) - tolower((unsigned char)*str2); } //***************************************************************************** // char *strdup(char *str) // char *strdup(char *str) { char *p = new char[strlen(str) + 1]; strcpy(p, str); return p; } //***************************************************************************** // char *mystrcasestr(const char *s, const char *pattern) // const char * mystrcasestr(const char *s, const char *pattern) { int length = strlen(pattern); while (*s) { if (mystrncasecmp(s, pattern, length) == 0) return s; s++; } return 0; }