summaryrefslogtreecommitdiff
path: root/xs_io.h
diff options
context:
space:
mode:
authordefault <nobody@localhost>2022-10-16 18:03:28 +0200
committerdefault <nobody@localhost>2022-10-16 18:03:28 +0200
commitd9a15b8af7da2bc27d4d55ee745242f5b4e39071 (patch)
treef890fe2b2f0a327f08da31404fd267c675fac690 /xs_io.h
parent0d79e465e6f01e51c5ddf26b40096e608b506d9b (diff)
Attachments are now starting to get real.
Diffstat (limited to 'xs_io.h')
-rw-r--r--xs_io.h19
1 files changed, 11 insertions, 8 deletions
diff --git a/xs_io.h b/xs_io.h
index 62af82c..ca243ad 100644
--- a/xs_io.h
+++ b/xs_io.h
@@ -59,26 +59,29 @@ d_char *xs_readline(FILE *f)
d_char *xs_read(FILE *f, int *sz)
/* reads up to size bytes from f */
{
- d_char *s;
- int size = *sz;
- int rdsz = 0;
+ d_char *s = NULL;
+ int size = *sz;
+ int rdsz = 0;
errno = 0;
- s = xs_str_new(NULL);
-
while (size > 0 && !feof(f)) {
- char tmp[2048];
+ char tmp[4096];
int n, r;
if ((n = sizeof(tmp)) > size)
n = size;
r = fread(tmp, 1, n, f);
- s = xs_append_m(s, tmp, r);
- size -= r;
+ /* open room */
+ s = xs_realloc(s, rdsz + r);
+
+ /* copy read data */
+ memcpy(s + rdsz, tmp, r);
+
rdsz += r;
+ size -= r;
}
*sz = rdsz;