summaryrefslogtreecommitdiffstats
path: root/include/writeall.h
diff options
context:
space:
mode:
authorKarel Zak2011-08-02 13:53:41 +0200
committerKarel Zak2011-08-02 13:53:41 +0200
commit330f543985cb99e4487d59dbe35ce778382c8f6f (patch)
tree7e7142f162453c25a3d224b54641fda372fc142d /include/writeall.h
parentlibblkid: fix compiler warnings [-Wunused-parameter -Wsign-compare] (diff)
downloadkernel-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.h22
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 */