From: epg <> Date: Sun, 25 Aug 2002 06:27:11 +0000 (+0000) Subject: (deliver): Handle errors from read(2) on stdin. X-Git-Url: https://diplodocus.org/git/mdeliver/commitdiff_plain/56347cf4a80a58196e6f20472d72a82b3b2e5281?hp=d4cc8846dbe722263660f425bdba1afb00fb33b2 (deliver): Handle errors from read(2) on stdin. --- diff --git a/mdeliver.c b/mdeliver.c index 8139f45..99eaec1 100644 --- a/mdeliver.c +++ b/mdeliver.c @@ -119,13 +119,19 @@ deliver(char *maildir, char *newfn) /* 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);