On Thu, 31 Dec 2009, Kirill A. Shutemov wrote: > 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.
Uh, yes, sorry, been writing too much driver code lately. Nitpick then, no reason to set ret to zero at the beginning of the function. -- mailto:av1...@comtv.ru