diff --git a/kernel/kernel.c b/kernel/kernel.c index fb7d84f..0073060 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -175,14 +175,16 @@ int strcasecmp(const char *s1, const char *s2) return (int)UPPER(*s1) - (int)UPPER(*s2); } -int memcmp(const char *s1, const char *s2, size_t n) +int memcmp(const void *_s1, const void *_s2, size_t n) { + unsigned char const *s1 = _s1, *s2 = _s2; + while(n--) { if(*s1 != *s2) - return *s1 - *s2; - *s1++; - *s2++; + return (int)*s1 - (int)*s2; + s1++; + s2++; } return 0; } diff --git a/kernel/kernel.h b/kernel/kernel.h index 2faac3f..2d671f8 100644 --- a/kernel/kernel.h +++ b/kernel/kernel.h @@ -85,7 +85,8 @@ void *memset(void *s, int c, size_t n); void *memcpy(void *dest, const void *src, size_t n); size_t strlen(const char *s); int strcasecmp(const char *s1, const char *s2); -int memcmp(const char *s1, const char *s2, size_t n); +int memcmp(const void *s1, const void *s2, size_t n); + /* stdarg.h functions */ typedef void * va_list; #define va_start(v,a) v = (void *)((uintptr_t)(&a) + sizeof(a))