include: [writeall] add fwrite_all()
Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
parent
c9f51c712f
commit
330f543985
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue