summaryrefslogtreecommitdiff
path: root/str/str.c
diff options
context:
space:
mode:
authorSoikk2025-12-01 18:14:54 +0100
committerSoikk2025-12-01 18:14:54 +0100
commit2849165b1de9ad6643d39fec32954a165b7fdc2e (patch)
tree86a9eba053ad6f8be5e914bfefd8da8eb0b93986 /str/str.c
parent5aec21fe321737b00c86dd2a746506728917c7a2 (diff)
downloadsoikk-libs-2849165b1de9ad6643d39fec32954a165b7fdc2e.tar.xz
soikk-libs-2849165b1de9ad6643d39fec32954a165b7fdc2e.tar.zst
Added binary read functions that disregard NULL characters
Diffstat (limited to 'str/str.c')
-rwxr-xr-xstr/str.c32
1 files changed, 32 insertions, 0 deletions
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++;