X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/90ba34e27c74c9fd8a8a00a360132caf20877fc2..c1659c79ef18a34d6954689ddd03475cbfdbb1c7:/log.c diff --git a/log.c b/log.c index a826b185..64e97b91 100644 --- a/log.c +++ b/log.c @@ -31,6 +31,7 @@ static char *logfname; static FILE *logfile; static int log_error_fd = -1; +int log_got_error=0; struct { int code; @@ -39,7 +40,7 @@ struct { { RERR_SYNTAX , "syntax or usage error" }, { RERR_PROTOCOL , "protocol incompatibility" }, { RERR_FILESELECT , "errors selecting input/output files, dirs" }, - { RERR_UNSUPPORTED , "requested action not supported" }, + { RERR_UNSUPPORTED, "requested action not supported" }, { RERR_SOCKETIO , "error in socket IO" }, { RERR_FILEIO , "error in file IO" }, { RERR_STREAMIO , "error in rsync protocol data stream" }, @@ -48,7 +49,12 @@ struct { { RERR_SIGNAL , "received SIGUSR1 or SIGINT" }, { RERR_WAITCHILD , "some error returned by waitpid()" }, { RERR_MALLOC , "error allocating core memory buffers" }, + { RERR_PARTIAL , "partial transfer" }, { RERR_TIMEOUT , "timeout in data send/receive" }, + { RERR_CMD_FAILED , "remote shell failed" }, + { RERR_CMD_KILLED , "remote shell killed" }, + { RERR_CMD_RUN, "remote command could not be run" }, + { RERR_CMD_NOTFOUND, "remote command not found" }, { 0, NULL } }; @@ -107,6 +113,8 @@ void err_list_push(void) while (err_list_head) { struct err_list *el = err_list_head; int n = write(log_error_fd, el->buf+el->written, el->len - el->written); + /* don't check for an error if the best way of handling the error is + to ignore it */ if (n == -1) break; if (n > 0) { el->written += n; @@ -250,6 +258,7 @@ void rwrite(enum logcode code, char *buf, int len) } if (code == FERROR) { + log_got_error = 1; f = stderr; } @@ -277,7 +286,7 @@ void rprintf(enum logcode code, const char *format, ...) int len; va_start(ap, format); - len = vslprintf(buf, sizeof(buf), format, ap); + len = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); if (len > sizeof(buf)-1) exit_cleanup(RERR_MESSAGEIO); @@ -302,7 +311,7 @@ void rsyserr(enum logcode code, int errcode, const char *format, ...) char *sysmsg; va_start(ap, format); - len = vslprintf(buf, sizeof(buf), format, ap); + len = vsnprintf(buf, sizeof(buf), format, ap); va_end(ap); if (len > sizeof(buf)-1) exit_cleanup(RERR_MESSAGEIO); @@ -383,18 +392,18 @@ static void log_formatted(enum logcode code, case 'h': if (am_daemon) n = client_name(0); break; case 'a': if (am_daemon) n = client_addr(0); break; case 'l': - slprintf(buf2,sizeof(buf2),"%.0f", + snprintf(buf2,sizeof(buf2),"%.0f", (double)file->length); n = buf2; break; case 'p': - slprintf(buf2,sizeof(buf2),"%d", + snprintf(buf2,sizeof(buf2),"%d", (int)getpid()); n = buf2; break; case 'o': n = op; break; case 'f': - slprintf(buf2, sizeof(buf2), "%s/%s", + snprintf(buf2, sizeof(buf2), "%s/%s", file->basedir?file->basedir:"", f_name(file)); clean_fname(buf2); @@ -413,7 +422,7 @@ static void log_formatted(enum logcode code, b = stats.total_read - initial_stats->total_read; } - slprintf(buf2,sizeof(buf2),"%.0f", (double)b); + snprintf(buf2,sizeof(buf2),"%.0f", (double)b); n = buf2; break; case 'c': @@ -424,7 +433,7 @@ static void log_formatted(enum logcode code, b = stats.total_read - initial_stats->total_read; } - slprintf(buf2,sizeof(buf2),"%.0f", (double)b); + snprintf(buf2,sizeof(buf2),"%.0f", (double)b); n = buf2; break; } @@ -502,7 +511,7 @@ void log_exit(int code, const char *file, int line) if (!name) name = "unexplained error"; - rprintf(FLOG,"transfer interrupted: %s (code %d) at %s(%d)\n", + rprintf(FERROR,"rsync error: %s (code %d) at %s(%d)\n", name, code, file, line); } }