diff -r 4714468b9b7e -r 499711b2a970 src/server/util/writer.c --- a/src/server/util/writer.c Fri Jan 17 22:23:30 2020 +0100 +++ b/src/server/util/writer.c Sat Jan 18 13:48:59 2020 +0100 @@ -71,6 +71,7 @@ return w->error; } + // available bytes size_t a = w->size - w->pos; if(a == 0) { if(writer_flush(w)) { @@ -78,11 +79,13 @@ } } - size_t cplen = len > a ? a : len; - memcpy(w->buffer, s, cplen); + size_t cplen = len > a ? a : len; // number of bytes we can copy + memcpy(w->buffer+w->pos, s, cplen); w->pos += cplen; if(cplen < len) { + // not all bytes copied -> call writer_put again + // the number of available bytes is 0 then, therefore flush is called return writer_put(w, s + cplen, len - cplen); } else { return 0;