diff options
author | Karel Zak | 2011-08-02 13:53:41 +0200 |
---|---|---|
committer | Karel Zak | 2011-08-02 13:53:41 +0200 |
commit | 330f543985cb99e4487d59dbe35ce778382c8f6f (patch) | |
tree | 7e7142f162453c25a3d224b54641fda372fc142d /include/writeall.h | |
parent | libblkid: fix compiler warnings [-Wunused-parameter -Wsign-compare] (diff) | |
download | kernel-qcow2-util-linux-330f543985cb99e4487d59dbe35ce778382c8f6f.tar.gz kernel-qcow2-util-linux-330f543985cb99e4487d59dbe35ce778382c8f6f.tar.xz kernel-qcow2-util-linux-330f543985cb99e4487d59dbe35ce778382c8f6f.zip |
include: [writeall] add fwrite_all()
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'include/writeall.h')
-rw-r--r-- | include/writeall.h | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/include/writeall.h b/include/writeall.h index 20207076d..6aa49272a 100644 --- a/include/writeall.h +++ b/include/writeall.h @@ -7,7 +7,7 @@ static inline int write_all(int fd, const void *buf, size_t count) { - while(count) { + while (count) { ssize_t tmp; errno = 0; @@ -24,4 +24,24 @@ static inline int write_all(int fd, const void *buf, size_t count) return 0; } +static inline int fwrite_all(const void *ptr, size_t size, + size_t nmemb, FILE *stream) +{ + while (nmemb) { + size_t tmp; + + errno = 0; + tmp = fwrite(ptr, size, nmemb, stream); + if (tmp > 0) { + nmemb -= tmp; + if (nmemb) + ptr += (tmp * size); + } else if (errno != EINTR && errno != EAGAIN) + return -1; + if (errno == EAGAIN) /* Try later, *sigh* */ + usleep(10000); + } + return 0; +} + #endif /* UTIL_LINUX_WRITEALL_H */ |