summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--dynarr.h3
-rw-r--r--strio.h15
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;