aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorlemon <lsof@mailbox.org>2023-06-18 22:25:07 +0200
committerlemon <lsof@mailbox.org>2023-06-18 22:25:07 +0200
commitb246b0f1f617d34560402c734630369145c2dee1 (patch)
treea59a2fd79a0f4eeb4708186ad9ec957aae643893
parent3990f0f2731c2289eaefefc9aff5bdcaee6c3289 (diff)
fix iowrite()
-rw-r--r--io.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/io.c b/io.c
index cc94a08..02252ac 100644
--- a/io.c
+++ b/io.c
@@ -24,7 +24,9 @@ iowrite(struct wbuf *buf, const void *Src, int n)
memcpy(buf->buf + buf->len, src, amt);
n -= amt;
- if ((buf->len += amt) == buf->cap) {
+ src += amt;
+ buf->len += amt;
+ if (n > 0 && buf->len == buf->cap) {
if (buf->fd < 0) {
buf->err = 1;
return;
@@ -47,6 +49,7 @@ ioflush(struct wbuf *buf)
for (i = 0; buf->len > 0;) {
ret = write(buf->fd, buf->buf + i, buf->len);
if (ret > 0) {
+ assert(ret <= buf->len);
buf->len -= ret;
i += ret;
} else if (errno == EAGAIN || errno == EWOULDBLOCK) {