Retry read/write while there is space
This commit is contained in:
parent
d080bf3b9c
commit
f0764c24d2
@ -361,13 +361,15 @@ send_launch_msg(void) {
|
|||||||
static bool
|
static bool
|
||||||
read_or_transfer(int src_fd, int dest_fd, transfer_buf *t) {
|
read_or_transfer(int src_fd, int dest_fd, transfer_buf *t) {
|
||||||
(void)dest_fd;
|
(void)dest_fd;
|
||||||
if (t->sz >= IO_BUZ_SZ) return true;
|
while(t->sz < IO_BUZ_SZ) {
|
||||||
ssize_t n = safe_read(src_fd, t->buf + t->sz, IO_BUZ_SZ - t->sz);
|
ssize_t n = safe_read(src_fd, t->buf + t->sz, IO_BUZ_SZ - t->sz);
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
if (errno == EAGAIN || errno == EWOULDBLOCK) return true;
|
if (errno == EAGAIN || errno == EWOULDBLOCK) return true;
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
if (!n) break;
|
||||||
|
t->sz += n;
|
||||||
}
|
}
|
||||||
t->sz += n;
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -378,15 +380,16 @@ read_or_transfer_from_child_tty(void) {
|
|||||||
|
|
||||||
static bool
|
static bool
|
||||||
write_from_to(transfer_buf *src, int dest_fd) {
|
write_from_to(transfer_buf *src, int dest_fd) {
|
||||||
if (!src->sz) return true;
|
while (src->sz) {
|
||||||
ssize_t n = safe_write(dest_fd, src->buf, src->sz);
|
ssize_t n = safe_write(dest_fd, src->buf, src->sz);
|
||||||
if (n < 0) {
|
if (n < 0) {
|
||||||
if (errno == EAGAIN || errno == EWOULDBLOCK) return true;
|
if (errno == EAGAIN || errno == EWOULDBLOCK) return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
src->sz -= n;
|
src->sz -= n;
|
||||||
memmove(src->buf, src->buf + n, src->sz);
|
memmove(src->buf, src->buf + n, src->sz);
|
||||||
|
} else break;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user