2009/12/31 malc <av1...@comtv.ru>: > On Thu, 31 Dec 2009, Kirill A. Shutemov wrote: > >> On Thu, Dec 31, 2009 at 4:00 AM, malc <av1...@comtv.ru> wrote: >> > On Thu, 31 Dec 2009, Kirill A. Shutemov wrote: >> > >> >> A variant of write(2) which handles partial write. >> >> >> >> Signed-off-by: Kirill A. Shutemov <kir...@shutemov.name> >> >> --- >> >> osdep.c | 27 +++++++++++++++++++++++++++ >> >> qemu-common.h | 1 + >> >> 2 files changed, 28 insertions(+), 0 deletions(-) >> >> >> >> diff --git a/osdep.c b/osdep.c >> >> index e4836e7..d2406f2 100644 >> >> --- a/osdep.c >> >> +++ b/osdep.c >> >> @@ -243,6 +243,33 @@ int qemu_open(const char *name, int flags, ...) >> >> return ret; >> >> } >> >> >> >> +/* >> >> + * A variant of write(2) which handles partial write. >> >> + * >> >> + * Return the number of bytes transferred. >> >> + * Set errno if fewer than `count' bytes are written. >> >> + */ >> >> +ssize_t qemu_write_full(int fd, const void *buf, size_t count) >> >> +{ >> >> + ssize_t ret = 0; >> >> + ssize_t total = 0; >> >> + >> >> + while (count) { >> >> + ret = write(fd, buf, count); >> >> + if (ret < 0) { >> >> + if (errno == EINTR) >> >> + continue; >> >> + break; >> >> + } >> >> + >> >> + count -= ret; >> >> + buf += ret; >> >> + total += ret; >> >> + } >> >> + >> >> + return total; >> >> +} >> > >> > This hides write errors. >> >> Why do you think so? Return value < count indicates error. > > It does not indicate _which_ error it was.
??? You can check errno.