summaryrefslogtreecommitdiff
path: root/xs_io.h
diff options
context:
space:
mode:
authorGravatar default2022-10-16 18:03:28 +0200
committerGravatar default2022-10-16 18:03:28 +0200
commitd9a15b8af7da2bc27d4d55ee745242f5b4e39071 (patch)
treef890fe2b2f0a327f08da31404fd267c675fac690 /xs_io.h
parentUse multipart/form-data for posts (on the way to supporting uploads). (diff)
downloadpenes-snac2-d9a15b8af7da2bc27d4d55ee745242f5b4e39071.tar.gz
penes-snac2-d9a15b8af7da2bc27d4d55ee745242f5b4e39071.tar.xz
penes-snac2-d9a15b8af7da2bc27d4d55ee745242f5b4e39071.zip
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)
59d_char *xs_read(FILE *f, int *sz) 59d_char *xs_read(FILE *f, int *sz)
60/* reads up to size bytes from f */ 60/* reads up to size bytes from f */
61{ 61{
62 d_char *s; 62 d_char *s = NULL;
63 int size = *sz; 63 int size = *sz;
64 int rdsz = 0; 64 int rdsz = 0;
65 65
66 errno = 0; 66 errno = 0;
67 67
68 s = xs_str_new(NULL);
69
70 while (size > 0 && !feof(f)) { 68 while (size > 0 && !feof(f)) {
71 char tmp[2048]; 69 char tmp[4096];
72 int n, r; 70 int n, r;
73 71
74 if ((n = sizeof(tmp)) > size) 72 if ((n = sizeof(tmp)) > size)
75 n = size; 73 n = size;
76 74
77 r = fread(tmp, 1, n, f); 75 r = fread(tmp, 1, n, f);
78 s = xs_append_m(s, tmp, r);
79 76
80 size -= r; 77 /* open room */
78 s = xs_realloc(s, rdsz + r);
79
80 /* copy read data */
81 memcpy(s + rdsz, tmp, r);
82
81 rdsz += r; 83 rdsz += r;
84 size -= r;
82 } 85 }
83 86
84 *sz = rdsz; 87 *sz = rdsz;