diff options
-rw-r--r-- | kern/string.c | 23 | ||||
-rw-r--r-- | kern/string.h | 1 |
2 files changed, 24 insertions, 0 deletions
diff --git a/kern/string.c b/kern/string.c index b77aa2f3..584030b9 100644 --- a/kern/string.c +++ b/kern/string.c @@ -177,6 +177,29 @@ strcmp(const char *s1, const char *s2) } #endif /* ARCH_STRING_STRCMP */ +#ifndef ARCH_STRING_STRNCMP +int +strncmp(const char *s1, const char *s2, size_t n) +{ + char c1, c2; + + c1 = '\0'; + c2 = '\0'; + + while ((n != 0) && (c1 = *s1) == (c2 = *s2)) { + if (c1 == '\0') { + return 0; + } + + n--; + s1++; + s2++; + } + + return (int)c1 - (int)c2; +} +#endif /* ARCH_STRING_STRNCMP */ + #ifndef ARCH_STRING_STRCHR char * strchr(const char *s, int c) diff --git a/kern/string.h b/kern/string.h index 86786c2b..35490ffa 100644 --- a/kern/string.h +++ b/kern/string.h @@ -28,6 +28,7 @@ size_t strlen(const char *s); char * strcpy(char *dest, const char *src); size_t strlcpy(char *dest, const char *src, size_t n); int strcmp(const char *s1, const char *s2); +int strncmp(const char *s1, const char *s2, size_t n); char * strchr(const char *s, int c); #endif /* _KERN_STRING_H */ |