diff options
author | Richard Braun <rbraun@sceen.net> | 2017-05-28 17:46:02 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2017-05-28 17:57:29 +0200 |
commit | 4631ace136b0e8d2a34ac5399857540d8ab08d93 (patch) | |
tree | 58c0df9e54f90d95bdcd765ea847457477b2caf1 /kern | |
parent | 955ceba97a07d11305404aaf62dd052a20d6414f (diff) |
kern/string: implement strncmp
Diffstat (limited to 'kern')
-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 */ |