op; \
errno = olderrno; \
}
+#define try_unlink(fn) save_errno( unlink(fn) )
static char ident[] = "$Id$";
_err(bool want_strerror, int lineno, char *format, ...)
{
va_list ap;
+ int olderrno = errno;
fprintf(stderr, "mdeliver:%d:", lineno);
va_end(ap);
if (want_strerror) {
- perror("");
- } else {
- fputs("\n", stderr);
+ fputs(": ", stderr);
+ fputs(strerror(olderrno), stderr);
}
+ fputs("\n", stderr);
exit(EX_TEMPFAIL);
}
*/
r = read(0, buf, 5);
if (r != 5) {
- save_errno( unlink(fn) );
+ try_unlink(fn);
err("read(0, 5)");
}
}
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);
}
}
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);
}
}
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);
}
}
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. */