]> diplodocus.org Git - mdeliver/commitdiff
(deliver): Handle errors from read(2) on stdin.
authorepg <>
Sun, 25 Aug 2002 06:27:11 +0000 (06:27 +0000)
committerepg <>
Sun, 25 Aug 2002 06:27:11 +0000 (06:27 +0000)
mdeliver.c

index 8139f457dbfca67a98794102dd6d8a4a44b9bb72..99eaec1825253392971d89a558ad22291f8abb0a 100644 (file)
@@ -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. */
 
     /* 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 (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);
     if (fsync(fd) < 0) {
         unlink(fn);
         err(EX_TEMPFAIL, "Failed fsync(%s)", fn);