]> git.proxmox.com Git - qemu.git/commitdiff
fixed stdio write
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sat, 18 Sep 2004 19:34:39 +0000 (19:34 +0000)
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>
Sat, 18 Sep 2004 19:34:39 +0000 (19:34 +0000)
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1072 c046a42c-6fe2-441c-8c8c-71466251a162

vl.c

diff --git a/vl.c b/vl.c
index 958a432f77f13d64dfe56363e0ae06a88c12797b..02edc7deb5fe1e61aa0d9e15c8f020d25f3c0a51 100644 (file)
--- 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,