summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorspew <devnull@localhost>2018-06-21 11:56:37 -0400
committerspew <devnull@localhost>2018-06-21 11:56:37 -0400
commit55c122d59f504ae48f834b3299484ef4f56283d6 (patch)
tree4171a2644362bd9631aebc8edb5dc66b4da3c50d /sys
parent3b376b43af24f8013d330eb2eb9c3b78849bb7c3 (diff)
ape: add strnlen
Diffstat (limited to 'sys')
-rw-r--r--sys/include/ape/string.h1
-rw-r--r--sys/src/ape/lib/ap/gen/mkfile1
-rw-r--r--sys/src/ape/lib/ap/gen/strlen.c1
-rw-r--r--sys/src/ape/lib/ap/gen/strnlen.c11
4 files changed, 13 insertions, 1 deletions
diff --git a/sys/include/ape/string.h b/sys/include/ape/string.h
index 52813b15d..50dfad93c 100644
--- a/sys/include/ape/string.h
+++ b/sys/include/ape/string.h
@@ -32,6 +32,7 @@ extern char *strtok(char *, const char *);
extern void *memset(void *, int, size_t);
extern char *strerror(int);
extern size_t strlen(const char *);
+extern size_t strnlen(const char *, size_t);
#ifdef _REENTRANT_SOURCE
extern char *strerror_r(int, const char *, int);
diff --git a/sys/src/ape/lib/ap/gen/mkfile b/sys/src/ape/lib/ap/gen/mkfile
index 6594587f4..54ff7a617 100644
--- a/sys/src/ape/lib/ap/gen/mkfile
+++ b/sys/src/ape/lib/ap/gen/mkfile
@@ -43,6 +43,7 @@ ALLOFILES=\
strncat.$O\
strncmp.$O\
strncpy.$O\
+ strnlen.$O\
strpbrk.$O\
strrchr.$O\
strspn.$O\
diff --git a/sys/src/ape/lib/ap/gen/strlen.c b/sys/src/ape/lib/ap/gen/strlen.c
index e339cb16b..02632a6a3 100644
--- a/sys/src/ape/lib/ap/gen/strlen.c
+++ b/sys/src/ape/lib/ap/gen/strlen.c
@@ -3,6 +3,5 @@
size_t
strlen(const char *s)
{
-
return strchr(s, 0) - s;
}
diff --git a/sys/src/ape/lib/ap/gen/strnlen.c b/sys/src/ape/lib/ap/gen/strnlen.c
new file mode 100644
index 000000000..880d2eb59
--- /dev/null
+++ b/sys/src/ape/lib/ap/gen/strnlen.c
@@ -0,0 +1,11 @@
+#include <string.h>
+
+size_t
+strnlen(const char *s, size_t maxlen)
+{
+ size_t i;
+
+ for (i = 0; i < maxlen && s[i] != '\0'; i++)
+ ;
+ return i;
+}