diff options
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 */ |