summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-09-26 22:54:12 -0400
committerIan Moffett <ian@osmora.org>2025-09-26 22:54:12 -0400
commitcb10d0bee9c62a096b1a3571d1d7e896e6864ecc (patch)
tree50dc1cabe858e33b4f521df8c187ae139ab8829e
parentb338e2a75550c035dabd04538fdc2843bce85870 (diff)
libc: string: Add POSIX strnlen()
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r--src/lib/libc/include/string.h9
-rw-r--r--src/lib/libc/src/string/strlen.c14
2 files changed, 23 insertions, 0 deletions
diff --git a/src/lib/libc/include/string.h b/src/lib/libc/include/string.h
index 83bb551..58a7caa 100644
--- a/src/lib/libc/include/string.h
+++ b/src/lib/libc/include/string.h
@@ -39,4 +39,13 @@
*/
size_t strlen(const char *s);
+/*
+ * Get the length of a string with a maximum
+ * length
+ *
+ * @s: String to check length of
+ * @maxlen: Max length of string to check
+ */
+size_t strnlen(const char *s, size_t maxlen);
+
#endif /* _STRING_H */
diff --git a/src/lib/libc/src/string/strlen.c b/src/lib/libc/src/string/strlen.c
index de02ad9..59184e8 100644
--- a/src/lib/libc/src/string/strlen.c
+++ b/src/lib/libc/src/string/strlen.c
@@ -38,3 +38,17 @@ strlen(const char *s)
while (s[len++] != '\0');
return len - 1;
}
+
+size_t
+strnlen(const char *s, size_t maxlen)
+{
+ size_t len = 0;
+
+ while (s[len++] != '\0') {
+ if (len >= maxlen) {
+ return len - 1;
+ }
+ }
+
+ return len - 1;
+}