]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
include: [writeall] add fwrite_all()
authorKarel Zak <kzak@redhat.com>
Tue, 2 Aug 2011 11:53:41 +0000 (13:53 +0200)
committerKarel Zak <kzak@redhat.com>
Tue, 2 Aug 2011 11:53:41 +0000 (13:53 +0200)
Signed-off-by: Karel Zak <kzak@redhat.com>
include/writeall.h

index 20207076d8012600bc0934094de76ef62f1ad8ef..6aa49272af1c561e21d924520802f56f00a75688 100644 (file)
@@ -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 */