From 9ce4e557d79b86fcf5ff03209816d11934d7fc81 Mon Sep 17 00:00:00 2001 From: Jake Koroman Date: Wed, 24 Jun 2026 20:44:07 -0400 Subject: remove strnlen dependency and add jrk_strnlen. As I target C99 it was annoying to be forced to define _POSIX_C_SOURCE=200809L just for strnlen. Especially because it was called only once throughout the whole library. I just copy pasted the strnlen implementation used by musl as I would still like to take advantage of libc's memchr optimizations. Same code but no POSIX extension required, a true win. --- jrk.h | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/jrk.h b/jrk.h index a319bae..392a5b5 100644 --- a/jrk.h +++ b/jrk.h @@ -1,8 +1,3 @@ -/* - * requires POSIX.1-2008 - * #define _POSIX_C_SOURCE 200809L - */ - /* * TODO: * - add a log interface to give user control of logging. @@ -16,6 +11,7 @@ */ #include +#include #include typedef int8_t i8; @@ -85,6 +81,7 @@ void *jrk_arena_resize(jrk_Arena*, void*, u64, u64); i32 jrk_rand_num(i32); i32 jrk_rand_num_range(i32, i32); +size_t jrk_strnlen(const char *, size_t); jrk_fd jrk_fd_open_read(const char*); jrk_fd jrk_fd_open_write(const char*); @@ -876,7 +873,7 @@ jrk_string_from_cstr(const char *data) { jrk_String result = {0}; result.data = data; - result.len = strnlen(data, _JRK_MAX_STRNLEN); + result.len = jrk_strnlen(data, _JRK_MAX_STRNLEN); return result; } @@ -990,4 +987,12 @@ jrk_rand_num_range(i32 min, i32 max) return rand() % (max - min + 1) + min; } +/* musl implementation */ +size_t +jrk_strnlen(const char *s, size_t n) +{ + const char *p = memchr(s, 0, n); + return p ? (size_t) (p-s) : n; +} + #endif /* JRK_IMPLEMENTATION */ -- cgit v1.2.3