+/*
+ * No copyright is claimed. This code is in the public domain; do with
+ * it what you wish.
+ *
+ * Written by Karel Zak <kzak@redhat.com>
+ * Petr Uzel <petr.uzel@suse.cz>
+ */
+
#ifndef UTIL_LINUX_ALL_IO_H
#define UTIL_LINUX_ALL_IO_H
#include <unistd.h>
#include <errno.h>
+#include "c.h"
+
static inline int write_all(int fd, const void *buf, size_t count)
{
while (count) {
if (tmp > 0) {
count -= tmp;
if (count)
- buf = (void *) ((char *) buf + tmp);
+ buf = (const void *) ((const char *) buf + tmp);
} else if (errno != EINTR && errno != EAGAIN)
return -1;
if (errno == EAGAIN) /* Try later, *sigh* */
- usleep(10000);
+ xusleep(250000);
}
return 0;
}
if (tmp > 0) {
nmemb -= tmp;
if (nmemb)
- ptr = (void *) ((char *) ptr + (tmp * size));
+ ptr = (const void *) ((const char *) ptr + (tmp * size));
} else if (errno != EINTR && errno != EAGAIN)
return -1;
if (errno == EAGAIN) /* Try later, *sigh* */
- usleep(10000);
+ xusleep(250000);
}
return 0;
}
while (count > 0) {
ret = read(fd, buf, count);
if (ret <= 0) {
- if ((errno == EAGAIN || errno == EINTR || ret == 0) &&
- (tries++ < 5))
+ if (ret < 0 && (errno == EAGAIN || errno == EINTR) && (tries++ < 5)) {
+ xusleep(250000);
continue;
+ }
return c ? c : -1;
}
- if (ret > 0)
- tries = 0;
+ tries = 0;
count -= ret;
buf += ret;
c += ret;
return c;
}
-
#endif /* UTIL_LINUX_ALL_IO_H */