From 1d96905d761477826688e8bdb94373383539c36f Mon Sep 17 00:00:00 2001 From: bellard Date: Sat, 18 Sep 2004 19:34:39 +0000 Subject: [PATCH] fixed stdio write git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1072 c046a42c-6fe2-441c-8c8c-71466251a162 --- vl.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/vl.c b/vl.c index 958a432f77..02edc7deb5 100644 --- a/vl.c +++ b/vl.c @@ -1030,10 +1030,30 @@ typedef struct { static int stdio_nb_clients; static CharDriverState *stdio_clients[STDIO_MAX_CLIENTS]; +static int unix_write(int fd, const uint8_t *buf, int len1) +{ + int ret, len; + + len = len1; + while (len > 0) { + ret = write(fd, buf, len); + if (ret < 0) { + if (errno != EINTR && errno != EAGAIN) + return -1; + } else if (ret == 0) { + break; + } else { + buf += ret; + len -= ret; + } + } + return len1 - len; +} + static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len) { FDCharDriver *s = chr->opaque; - return write(s->fd_out, buf, len); + return unix_write(s->fd_out, buf, len); } static void fd_chr_add_read_handler(CharDriverState *chr, -- GitLab