mirror of https://github.com/xqemu/xqemu.git
fixed stdio write
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@1072 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
99679ececc
commit
1d96905d76
22
vl.c
22
vl.c
|
@ -1030,10 +1030,30 @@ typedef struct {
|
||||||
static int stdio_nb_clients;
|
static int stdio_nb_clients;
|
||||||
static CharDriverState *stdio_clients[STDIO_MAX_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)
|
static int fd_chr_write(CharDriverState *chr, const uint8_t *buf, int len)
|
||||||
{
|
{
|
||||||
FDCharDriver *s = chr->opaque;
|
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,
|
static void fd_chr_add_read_handler(CharDriverState *chr,
|
||||||
|
|
Loading…
Reference in New Issue