X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/1a016bfdec2823c6d4e78a3dcc253cdfc30a10af..bd7e05d7996e67cf12a0b01fe9286ef2813432f4:/log.c diff --git a/log.c b/log.c index 90b287e1..2454088e 100644 --- a/log.c +++ b/log.c @@ -56,6 +56,12 @@ void rprintf(int fd, const char *format, ...) int len; FILE *f=NULL; extern int am_daemon; + /* recursion can happen with certain fatal conditions */ + static int depth; + + if (depth) return; + + depth++; va_start(ap, format); len = vslprintf(buf, sizeof(buf)-1, format, ap); @@ -72,7 +78,11 @@ void rprintf(int fd, const char *format, ...) if (fd == FERROR) priority = LOG_WARNING; log_open(); - syslog(priority, "%s", buf); + if (!io_multiplex_write(fd, buf, strlen(buf))) { + syslog(priority, "%s", buf); + } + + depth--; return; } @@ -91,6 +101,10 @@ void rprintf(int fd, const char *format, ...) if (!f) exit_cleanup(1); if (fwrite(buf, len, 1, f) != 1) exit_cleanup(1); + + if (buf[len-1] == '\r') fflush(f); + + depth--; } void rflush(int fd)