// Copyright (2013) Jann Horn <jann@thejh.net>
-// This code is licensed under the AGPLv3.
HEADER #include <sys/types.h>
#include <unistd.h>
size_t done = 0;
while (done < count) {
ssize_t part_res = read(fd, buf+done, count-done);
+ if (part_res == -1 && errno == EINTR) continue;
if (part_res <= 0) {
if (last_res) *last_res = part_res;
if (done) return done;
// - -1: error
// - 0: stream ended
// - 1: no problems occured
-PUBLIC_FN ssize_t write_nointr(int fd, void *buf, size_t count, int *last_res) {
+PUBLIC_FN ssize_t write_nointr(int fd, void *buf, ssize_t count, int *last_res) {
+ if (count == -1) count = strlen(buf);
errno = 0;
size_t done = 0;
while (done < count) {
ssize_t part_res = write(fd, buf+done, count-done);
+ if (part_res == -1 && errno == EINTR) continue;
if (part_res <= 0) {
if (last_res) *last_res = part_res;
if (done) return done;