From: Karel Zak Date: Tue, 2 Aug 2011 11:53:41 +0000 (+0200) Subject: include: [writeall] add fwrite_all() X-Git-Tag: v2.20-rc2~121 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=330f543985cb99e4487d59dbe35ce778382c8f6f;p=thirdparty%2Futil-linux.git include: [writeall] add fwrite_all() Signed-off-by: Karel Zak --- diff --git a/include/writeall.h b/include/writeall.h index 20207076d8..6aa49272af 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 */