diff options
| author | 2023-06-18 22:25:07 +0200 | |
|---|---|---|
| committer | 2023-06-18 22:25:07 +0200 | |
| commit | b246b0f1f617d34560402c734630369145c2dee1 (patch) | |
| tree | a59a2fd79a0f4eeb4708186ad9ec957aae643893 | |
| parent | 3990f0f2731c2289eaefefc9aff5bdcaee6c3289 (diff) | |
fix iowrite()
| -rw-r--r-- | io.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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) { |