/* From this point, we have a tmp file, so if someting fails we
* must try to unlink it before bombing. */
- while ((r = read(STDIN_FILENO, buf, BUFSIZ)) > 0) {
+ while ((r = read(STDIN_FILENO, buf, BUFSIZ)) > 0
+ || (r == -1 && errno == EINTR)) {
if (full_write(fd, buf, r) != r) {
unlink(fn);
err(EX_TEMPFAIL, "Failed write(%s)", fn);
}
}
+ if (r == -1) {
+ unlink(fn);
+ err(EX_TEMPFAIL, "Failed read from stdin");
+ }
+
if (fsync(fd) < 0) {
unlink(fn);
err(EX_TEMPFAIL, "Failed fsync(%s)", fn);