diff options
author | default <nobody@localhost> | 2022-10-16 18:03:28 +0200 |
---|---|---|
committer | default <nobody@localhost> | 2022-10-16 18:03:28 +0200 |
commit | d9a15b8af7da2bc27d4d55ee745242f5b4e39071 (patch) | |
tree | f890fe2b2f0a327f08da31404fd267c675fac690 /xs_io.h | |
parent | 0d79e465e6f01e51c5ddf26b40096e608b506d9b (diff) |
Attachments are now starting to get real.
Diffstat (limited to 'xs_io.h')
-rw-r--r-- | xs_io.h | 19 |
1 files changed, 11 insertions, 8 deletions
@@ -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; |