#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
+#include <unistd.h>
#include <stdio.h>
#include <err.h>
+#include <errno.h>
#include "libi3.h"
va_end(args);
return result;
}
+
+ssize_t writeall(int fd, const void *buf, size_t count) {
+ int written = 0;
+ ssize_t n = 0;
+
+ while (written < count) {
+ n = write(fd, buf + written, count - written);
+ if (n == -1) {
+ if (errno == EINTR || errno == EAGAIN)
+ continue;
+ return n;
+ }
+ written += n;
+ }
+
+ return written;
+}
+
+ssize_t swrite(int fd, const void *buf, size_t count) {
+ ssize_t n;
+
+ n = writeall(fd, buf, count);
+ if (n == -1)
+ err(EXIT_FAILURE, "Failed to write %d", fd);
+ else
+ return n;
+}