the place.
(_err): Don't use the wrong errno if some printing fails.
op; \
errno = olderrno; \
}
op; \
errno = olderrno; \
}
+#define try_unlink(fn) save_errno( unlink(fn) )
static char ident[] = "$Id$";
static char ident[] = "$Id$";
_err(bool want_strerror, int lineno, char *format, ...)
{
va_list ap;
_err(bool want_strerror, int lineno, char *format, ...)
{
va_list ap;
fprintf(stderr, "mdeliver:%d:", lineno);
fprintf(stderr, "mdeliver:%d:", lineno);
va_end(ap);
if (want_strerror) {
va_end(ap);
if (want_strerror) {
- perror("");
- } else {
- fputs("\n", stderr);
+ fputs(": ", stderr);
+ fputs(strerror(olderrno), stderr);
*/
r = read(0, buf, 5);
if (r != 5) {
*/
r = read(0, buf, 5);
if (r != 5) {
- save_errno( unlink(fn) );
- save_errno( unlink(fn) );
err("read(0, 1)");
}
} else {
if (full_write(fd, buf, r) != r) {
err("read(0, 1)");
}
} else {
if (full_write(fd, buf, r) != r) {
- save_errno( unlink(fn) );
err("write(%s)", fn);
}
}
err("write(%s)", fn);
}
}
while ((r = read(infd, buf, bufsize)) > 0
|| (r == -1 && errno == EINTR)) {
if (full_write(outfd, buf, r) != r) {
while ((r = read(infd, buf, bufsize)) > 0
|| (r == -1 && errno == EINTR)) {
if (full_write(outfd, buf, r) != r) {
- save_errno( unlink(fn) );
err("write(%s)", fn);
}
}
if (r == -1) {
err("write(%s)", fn);
}
}
if (r == -1) {
- save_errno( unlink(fn) );
err("read(%d, %d)", infd, bufsize);
}
if (fsync(outfd) < 0) {
err("read(%d, %d)", infd, bufsize);
}
if (fsync(outfd) < 0) {
- save_errno( unlink(fn) );
err("fsync(%s)", fn);
}
if (close(outfd) < 0) {
err("fsync(%s)", fn);
}
if (close(outfd) < 0) {
- save_errno( unlink(fn) );
err("close(%s)", fn);
}
}
err("close(%s)", fn);
}
}
buf = getenv("RPLINE");
len = strlen(buf);
if (full_write(fd, buf, len) != len) {
buf = getenv("RPLINE");
len = strlen(buf);
if (full_write(fd, buf, len) != len) {
- save_errno( unlink(fn) );
err("write(%s)", fn);
}
buf = getenv("DTLINE");
len = strlen(buf);
if (full_write(fd, buf, len) != len) {
err("write(%s)", fn);
}
buf = getenv("DTLINE");
len = strlen(buf);
if (full_write(fd, buf, len) != len) {
- save_errno( unlink(fn) );
err("write(%s)", fn);
}
}
err("write(%s)", fn);
}
}
memcpy(newfn, sub, 3);
if (link(fn, newfn) != 0) {
memcpy(newfn, sub, 3);
if (link(fn, newfn) != 0) {
- save_errno( unlink(fn) );
err("link(%s, %s)", fn, newfn);
}
err("link(%s, %s)", fn, newfn);
}
- save_errno( unlink(fn) );
}
/* Run a program to process the new message. */
}
/* Run a program to process the new message. */