diff --git a/include/kernel/string.h b/include/kernel/string.h index 980caa984947d590c256fc84811d053e6fe37b09..7c6e8d588c65660409ac6904f136480432a5e860 100644 --- a/include/kernel/string.h +++ b/include/kernel/string.h @@ -12,6 +12,7 @@ int sprintf(char *str, const char *format, ...); int strcmp(const char *s1, const char *s2); +int strncmp(const char *s1, const char *s2, size_t n); char *strpbrk(const char *s, const char *accept); char *strsep(char **stringp, const char *delim); char *strdup(const char *s); diff --git a/lib/string.c b/lib/string.c index 15fa00a7f69fee252e6ca1c4a2d0467c073042fe..4f330e03d7b4c6f3909907edda8c47c98bbdb500 100644 --- a/lib/string.c +++ b/lib/string.c @@ -47,6 +47,39 @@ int strcmp(const char *s1, const char *s2) } EXPORT_SYMBOL(strcmp); + +/** + * @brief compare two strings s1 and s2 by comparing at most n bytes + * + * @returns <0, 0 or > 0 if s1 is less than, matches or greater than s2 + */ +int strncmp(const char *s1, const char *s2, size_t n) +{ + unsigned char c1, c2; + + while (n) { + + c1 = (*(s1++)); + c2 = (*(s2++)); + + if (c1 != c2) { + if (c1 < c2) + return -1; + else + return 1; + } + + if (!c1) + break; + + n--; + } + + return 0; +} +EXPORT_SYMBOL(strncmp); + + /** * @brief locate first occurrence of a set of characters in string accept *