src/server/util/writer.c

branch
webdav
changeset 318
60870dbac94f
parent 232
499711b2a970
child 381
7d55d60e1fe2
--- a/src/server/util/writer.c	Tue Apr 26 18:21:25 2022 +0200
+++ b/src/server/util/writer.c	Sat Apr 30 20:44:38 2022 +0200
@@ -34,6 +34,16 @@
 
 void writer_init(Writer *w, SYS_NETFD fd, char *buf, size_t len) {
     w->fd = fd;
+    w->write = (wr_writefunc)net_write;
+    w->buffer = buf;
+    w->size = len;
+    w->pos = 0;
+    w->error = 0;
+}
+
+void writer_init_with_stream(Writer *w, void *stream, wr_writefunc writefunc, char *buf, size_t len) {
+    w->fd = stream;
+    w->write = writefunc;
     w->buffer = buf;
     w->size = len;
     w->pos = 0;
@@ -49,7 +59,7 @@
     size_t len = w->pos;
     
     while(len > 0) {
-        ssize_t r = net_write(w->fd, w->buffer + pos, len);
+        ssize_t r = w->write(w->fd, w->buffer + pos, len);
         if(r <= 0) {
             break;
         }
@@ -105,3 +115,8 @@
     w->buffer[w->pos++] = c;
     return 0;
 }
+
+int writer_fwrite(const void *s, size_t size, size_t nelem, Writer *out) {
+    int w = writer_put(out, s, size*nelem);
+    return w/size;
+}

mercurial