From 2849165b1de9ad6643d39fec32954a165b7fdc2e Mon Sep 17 00:00:00 2001 From: Soikk Date: Mon, 1 Dec 2025 18:14:54 +0100 Subject: Added binary read functions that disregard NULL characters --- str/str.c | 32 ++++++++++++++++++++++++++++++++ str/str.h | 4 ++++ 2 files changed, 36 insertions(+) (limited to 'str') diff --git a/str/str.c b/str/str.c index 32b8d59..4a4c709 100755 --- a/str/str.c +++ b/str/str.c @@ -254,6 +254,15 @@ str read_delim(char *buf, char d){ return s; } +str bread_delim(char *buf, char d){ + u32 i = 0; + while(buf[i] != d) i++; + str s = {.cap = i, .len = i, .ptr = calloc(s.cap+1, sizeof(char))}; + if(s.ptr == NULL) return (str){0}; + memcpy(s.ptr, buf, i); + return s; +} + str sread_delim(char *buf, char d){ u32 i = 0; while(buf[i] && buf[i] != d) i++; @@ -261,6 +270,13 @@ str sread_delim(char *buf, char d){ return s; } +str sbread_delim(char *buf, char d){ + u32 i = 0; + while(buf[i] != d) i++; + str s = {.cap = 0, .len = i, .ptr = buf}; + return s; +} + str read_delim_f(char *buf, bool (*func)(char), bool func_cond){ u32 i = 0; while(buf[i] && (func(buf[i]) != func_cond)) i++; @@ -270,6 +286,15 @@ str read_delim_f(char *buf, bool (*func)(char), bool func_cond){ return s; } +str bread_delim_f(char *buf, bool (*func)(char), bool func_cond){ + u32 i = 0; + while(func(buf[i]) != func_cond) i++; + str s = {.cap = i, .len = i, .ptr = calloc(s.cap+1, sizeof(char))}; + if(s.ptr == NULL) return (str){0}; + memcpy(s.ptr, buf, i); + return s; +} + str sread_delim_f(char *buf, bool (*func)(char), bool func_cond){ u32 i = 0; while(buf[i] && (func(buf[i]) != func_cond)) i++; @@ -277,6 +302,13 @@ str sread_delim_f(char *buf, bool (*func)(char), bool func_cond){ return s; } +str sbread_delim_f(char *buf, bool (*func)(char), bool func_cond){ + u32 i = 0; + while(func(buf[i]) != func_cond) i++; + str s = {.cap = 0, .len = i, .ptr = buf}; + return s; +} + u32 get_line_len(char *buf){ u32 l = 0; while(buf[l] != '\0' && buf[l] != '\n') l++; diff --git a/str/str.h b/str/str.h index dbf91b9..84f1901 100755 --- a/str/str.h +++ b/str/str.h @@ -99,9 +99,13 @@ str vdup_nstrs(u64 n, va_list args); dup_nstrs(NUMSTRS(__VA_ARGS__), __VA_ARGS__); str read_delim(char *buf, char d); +str bread_delim(char *buf, char d); str sread_delim(char *buf, char d); +str sbread_delim(char *buf, char d); str read_delim_f(char *buf, bool (*func)(char), bool func_cond); +str bread_delim_f(char *buf, bool (*func)(char), bool func_cond); str sread_delim_f(char *buf, bool (*func)(char), bool func_cond); +str sbread_delim_f(char *buf, bool (*func)(char), bool func_cond); // probably do away with this u32 get_line_len(char *buf); -- cgit v1.2.3