diff options
author | WormHeamer | 2025-02-10 02:36:09 -0500 |
---|---|---|
committer | WormHeamer | 2025-02-10 02:37:36 -0500 |
commit | 528460889a2ea771e5ee81d6573a0e17d584ab6e (patch) | |
tree | 9694c28c1a4de075c01f99e7f09db07b49ed6d1f | |
parent | 1055461bcf7f0d20f8e6823094624138145d23ac (diff) |
make chunk size configurable, remove unneeded copying
-rw-r--r-- | strio.h | 15 |
1 files changed, 11 insertions, 4 deletions
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; |