summaryrefslogtreecommitdiff
path: root/kern
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2017-05-28 17:46:02 +0200
committerRichard Braun <rbraun@sceen.net>2017-05-28 17:57:29 +0200
commit4631ace136b0e8d2a34ac5399857540d8ab08d93 (patch)
tree58c0df9e54f90d95bdcd765ea847457477b2caf1 /kern
parent955ceba97a07d11305404aaf62dd052a20d6414f (diff)
kern/string: implement strncmp
Diffstat (limited to 'kern')
-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 */