]> diplodocus.org Git - mdeliver/commitdiff
Define and use try_unlink macro instead of save_errno(unlink) all over
authorepg <>
Thu, 30 Mar 2006 02:09:04 +0000 (02:09 +0000)
committerepg <>
Thu, 30 Mar 2006 02:09:04 +0000 (02:09 +0000)
the place.

(_err): Don't use the wrong errno if some printing fails.

mdeliver.c

index 4768c8ab720b94522c3282a100eab32dcc24ec6f..44e7e1641c5f0631b0af9fe47ab53dac17baa2e3 100644 (file)
@@ -53,6 +53,7 @@
     op;                                                                 \
     errno = olderrno;                                                   \
 }
+#define try_unlink(fn) save_errno( unlink(fn) )
 
 static char ident[] = "$Id$";
 
@@ -63,6 +64,7 @@ static void
 _err(bool want_strerror, int lineno, char *format, ...)
 {
     va_list ap;
+    int olderrno = errno;
 
     fprintf(stderr, "mdeliver:%d:", lineno);
 
@@ -71,10 +73,10 @@ _err(bool want_strerror, int lineno, char *format, ...)
     va_end(ap);
 
     if (want_strerror) {
-        perror("");
-    } else {
-        fputs("\n", stderr);
+        fputs(": ", stderr);
+        fputs(strerror(olderrno), stderr);
     }
+    fputs("\n", stderr);
 
     exit(EX_TEMPFAIL);
 }
@@ -186,7 +188,7 @@ strip_from(int fd, char *buf, char *fn)
      */
     r = read(0, buf, 5);
     if (r != 5) {
-        save_errno( unlink(fn) );
+        try_unlink(fn);
         err("read(0, 5)");
     }
 
@@ -199,12 +201,12 @@ strip_from(int fd, char *buf, char *fn)
         }
 
         if (r == -1) {
-            save_errno( unlink(fn) );
+            try_unlink(fn);
             err("read(0, 1)");
         }
     } else {
         if (full_write(fd, buf, r) != r) {
-            save_errno( unlink(fn) );
+            try_unlink(fn);
             err("write(%s)", fn);
         }
     }
@@ -226,23 +228,23 @@ copy_file(int infd, int outfd, char *buf, size_t bufsize, char *fn)
     while ((r = read(infd, buf, bufsize)) > 0
            || (r == -1 && errno == EINTR)) {
         if (full_write(outfd, buf, r) != r) {
-            save_errno( unlink(fn) );
+            try_unlink(fn);
             err("write(%s)", fn);
         }
     }
 
     if (r == -1) {
-        save_errno( unlink(fn) );
+        try_unlink(fn);
         err("read(%d, %d)", infd, bufsize);
     }
 
     if (fsync(outfd) < 0) {
-        save_errno( unlink(fn) );
+        try_unlink(fn);
         err("fsync(%s)", fn);
     }
 
     if (close(outfd) < 0) {
-        save_errno( unlink(fn) );
+        try_unlink(fn);
         err("close(%s)", fn);
     }
 }
@@ -277,13 +279,13 @@ deliver(char *maildir, char *sub, char *newfn)
         buf = getenv("RPLINE");
         len = strlen(buf);
         if (full_write(fd, buf, len) != len) {
-            save_errno( unlink(fn) );
+            try_unlink(fn);
             err("write(%s)", fn);
         }
         buf = getenv("DTLINE");
         len = strlen(buf);
         if (full_write(fd, buf, len) != len) {
-            save_errno( unlink(fn) );
+            try_unlink(fn);
             err("write(%s)", fn);
         }
     }
@@ -297,10 +299,10 @@ deliver(char *maildir, char *sub, char *newfn)
     memcpy(newfn, sub, 3);
 
     if (link(fn, newfn) != 0) {
-        save_errno( unlink(fn) );
+        try_unlink(fn);
         err("link(%s, %s)", fn, newfn);
     }
-    save_errno( unlink(fn) );
+    try_unlink(fn);
 }
 
 /* Run a program to process the new message. */