summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kern/string.c23
-rw-r--r--kern/string.h1
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 */