diff options
Diffstat (limited to 'strcasecmp.c')
-rw-r--r-- | strcasecmp.c | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/strcasecmp.c b/strcasecmp.c new file mode 100644 index 0000000..e8ff2e9 --- /dev/null +++ b/strcasecmp.c @@ -0,0 +1,40 @@ +/* $XFree86: xc/programs/xedit/strcasecmp.c,v 1.3 2002/02/10 02:50:05 paulo Exp $ */ + +#include <ctype.h> +#include <sys/types.h> + +#ifndef LISP +#include "xedit.h" +#endif + +/* Just like the BSD version. It assumes that tolower() is ANSI-compliant */ + +int +strcasecmp(const char *s1, const char *s2) +{ + const unsigned char *us1 = (const unsigned char *)s1; + const unsigned char *us2 = (const unsigned char *)s2; + + while (tolower(*us1) == tolower(*us2++)) + if (*us1++ == '\0') + return 0; + return tolower(*us1) - tolower(*--us2); +} + +int +strncasecmp(const char *s1, const char *s2, size_t n) +{ + if (n != 0) { + const unsigned char *us1 = (const unsigned char *)s1; + const unsigned char *us2 = (const unsigned char *)s2; + + do { + if (tolower(*us1) != tolower(*us2++)) + return tolower(*us1) - tolower(*--us2); + if (*us1++ == '\0') + break; + } while (--n != 0); + } + return 0; +} + |