/* * Copyright (C) 2008, Brian Cully */ #include "io.h" #include "log.h" #include #include #include #include int restartable_read(unsigned char *buf, size_t buflen) { ssize_t rc, readb; rc = 0; READLOOP: while (rc < buflen) { readb = read(STDIN_FILENO, buf + rc, buflen - rc); if (readb == -1) { if (errno == EAGAIN || errno == EINTR) goto READLOOP; return -1; } else if (readb == 0) { return -1; } rc += readb; } return rc; } int restartable_write(const unsigned char *buf, size_t buflen) { ssize_t rc, wroteb; rc = 0; WRITELOOP: while (rc < buflen) { wroteb = write(STDOUT_FILENO, buf + rc, buflen - rc); if (wroteb == -1) { if (errno == EAGAIN || errno == EINTR) goto WRITELOOP; return -1; } rc += wroteb; } return rc; }