diff options
| author | Soikk | 2025-12-01 18:14:54 +0100 |
|---|---|---|
| committer | Soikk | 2025-12-01 18:14:54 +0100 |
| commit | 2849165b1de9ad6643d39fec32954a165b7fdc2e (patch) | |
| tree | 86a9eba053ad6f8be5e914bfefd8da8eb0b93986 /str | |
| parent | 5aec21fe321737b00c86dd2a746506728917c7a2 (diff) | |
| download | soikk-libs-2849165b1de9ad6643d39fec32954a165b7fdc2e.tar.xz soikk-libs-2849165b1de9ad6643d39fec32954a165b7fdc2e.tar.zst | |
Added binary read functions that disregard NULL characters
Diffstat (limited to 'str')
| -rwxr-xr-x | str/str.c | 32 | ||||
| -rwxr-xr-x | str/str.h | 4 |
2 files changed, 36 insertions, 0 deletions
@@ -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++; @@ -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); |
