extern int allow_8bit_chars;
extern int protocol_version;
extern int preserve_times;
+extern int in_exit_cleanup;
extern int stdout_format_has_i;
extern int stdout_format_has_o_or_i;
extern int logfile_format_has_i;
{ 0, NULL }
};
+#define EXIT_OR_RETURN(err) \
+ do { \
+ if (in_exit_cleanup) \
+ return; \
+ exit_cleanup(err); \
+ } while (0)
+
/*
* Map from rsync error code to name, or return NULL.
&& ((use_isprint && !isprint(*(uchar*)s))
|| *(uchar*)s < ' '))) {
if (s != buf && fwrite(buf, s - buf, 1, f) != 1)
- exit_cleanup(RERR_MESSAGEIO);
+ EXIT_OR_RETURN(RERR_MESSAGEIO);
fprintf(f, "\\#%03o", *(uchar*)s);
buf = s + 1;
}
}
if (buf != end && fwrite(buf, end - buf, 1, f) != 1)
- exit_cleanup(RERR_MESSAGEIO);
+ EXIT_OR_RETURN(RERR_MESSAGEIO);
}
/* this is the underlying (unformatted) rsync debugging function. Call
FILE *f = NULL;
if (len < 0)
- exit_cleanup(RERR_MESSAGEIO);
+ EXIT_OR_RETURN(RERR_MESSAGEIO);
if (am_server && msg_fd_out >= 0) {
/* Pass the message to our sibling. */
f = am_server ? stderr : stdout;
break;
default:
- exit_cleanup(RERR_MESSAGEIO);
+ EXIT_OR_RETURN(RERR_MESSAGEIO);
}
trailing_CR_or_NL = len && (buf[len-1] == '\n' || buf[len-1] == '\r')
": %s (%d)\n", strerror(errcode), errcode);
}
if (len >= sizeof buf)
- exit_cleanup(RERR_MESSAGEIO);
+ EXIT_OR_RETURN(RERR_MESSAGEIO);
rwrite(code, buf, len);
}
total = strlcpy(buf, format, sizeof buf);
if (total > MAXPATHLEN) {
rprintf(FERROR, "log-format string is WAY too long!\n");
- exit_cleanup(RERR_MESSAGEIO);
+ EXIT_OR_RETURN(RERR_MESSAGEIO);
}
buf[total++] = '\n';
buf[total] = '\0';