diff options
Diffstat (limited to '')
-rw-r--r-- | usr/klibc/strcasecmp.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/usr/klibc/strcasecmp.c b/usr/klibc/strcasecmp.c new file mode 100644 index 0000000..ee1f28b --- /dev/null +++ b/usr/klibc/strcasecmp.c @@ -0,0 +1,24 @@ +/* + * strcasecmp.c + */ + +#include <string.h> +#include <ctype.h> + +int strcasecmp(const char *s1, const char *s2) +{ + const unsigned char *c1 = (const unsigned char *)s1; + const unsigned char *c2 = (const unsigned char *)s2; + unsigned char ch; + int d = 0; + + while (1) { + /* toupper() expects an unsigned char (implicitly cast to int) + as input, and returns an int, which is exactly what we want. */ + d = toupper(ch = *c1++) - toupper(*c2++); + if (d || !ch) + break; + } + + return d; +} |