src/server/util/writer.c

branch
webdav
changeset 232
499711b2a970
parent 211
2160585200ac
child 318
60870dbac94f
equal deleted inserted replaced
231:4714468b9b7e 232:499711b2a970
69 int writer_put(Writer *w, const char *s, size_t len) { 69 int writer_put(Writer *w, const char *s, size_t len) {
70 if(w->error) { 70 if(w->error) {
71 return w->error; 71 return w->error;
72 } 72 }
73 73
74 // available bytes
74 size_t a = w->size - w->pos; 75 size_t a = w->size - w->pos;
75 if(a == 0) { 76 if(a == 0) {
76 if(writer_flush(w)) { 77 if(writer_flush(w)) {
77 return 1; 78 return 1;
78 } 79 }
79 } 80 }
80 81
81 size_t cplen = len > a ? a : len; 82 size_t cplen = len > a ? a : len; // number of bytes we can copy
82 memcpy(w->buffer, s, cplen); 83 memcpy(w->buffer+w->pos, s, cplen);
83 w->pos += cplen; 84 w->pos += cplen;
84 85
85 if(cplen < len) { 86 if(cplen < len) {
87 // not all bytes copied -> call writer_put again
88 // the number of available bytes is 0 then, therefore flush is called
86 return writer_put(w, s + cplen, len - cplen); 89 return writer_put(w, s + cplen, len - cplen);
87 } else { 90 } else {
88 return 0; 91 return 0;
89 } 92 }
90 } 93 }

mercurial