diff options
-rw-r--r-- | dynarr.h | 3 | ||||
-rw-r--r-- | strio.h | 15 |
2 files changed, 13 insertions, 5 deletions
diff --git a/dynarr.h b/dynarr.h index fe3c84b..9fe8701 100644 --- a/dynarr.h +++ b/dynarr.h @@ -19,6 +19,7 @@ typedef struct { size_t count, capacity; } DynArrHeader; da = (void *)(da_init_ptr + sizeof(DynArrHeader));\ *DA_HEADER(da) = (DynArrHeader) { 0, cap };\ } while(0) + #define DA_INIT(da) DA_INIT_SZ(da, DA_INIT_CAP) #define DA_FREE(da)\ @@ -49,6 +50,6 @@ typedef struct { size_t count, capacity; } DynArrHeader; for (typeof(da) name = (da); name < &(da)[DA_LEN(da)]; name++) #define DA_FORVAL(da, name)\ - for (volatile typeof(*(da)) *da_iter = (da), name; da_iter < &(da)[DA_LEN(da)] && (name = *da_iter, 1); da_iter++) + for (volatile typeof(*(da)) *stdwrm__da_iter = (da), name; stdwrm__da_iter < &(da)[DA_LEN(da)] && (name = *stdwrm__da_iter, 1); stdwrm__da_iter++) #endif diff --git a/strio.h b/strio.h index 20d0ddf..6aaf741 100644 --- a/strio.h +++ b/strio.h @@ -5,17 +5,24 @@ #include "str.h" +#ifndef STRIO_CHUNK_SIZE +#define STRIO_CHUNK_SIZE 256 +#endif + string read_whole_file(FILE *f); #ifdef STDWRM_IMPL_STR +#include <stdio.h> + string read_whole_file(FILE *f) { - char chunk[256]; string s; - DA_INIT(s); + DA_INIT_SIZE(s, STRIO_CHUNK_SIZE); while (!feof(f)) { - size_t n = fread(chunk, 1, sizeof chunk, f); - DA_PUSH_MULT(s, chunk, n); + char *buf = &s[DA_LEN(s)]; + size_t n = fread(buf, 1, STRIO_CHUNK_SIZE, f); + DA_FIT(s, DA_LEN(s) + n); + DA_LEN(s) += n; } DA_PUSH(s, 0); return s; |