X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/1ed56a05c26b6cb6f3891ce16be89aeab388a293..bb4e4d889f51065dcef6f34d8ba4a80c051149a1:/log.c diff --git a/log.c b/log.c index c5dcbb94..9100f5db 100644 --- a/log.c +++ b/log.c @@ -3,7 +3,7 @@ * * Copyright (C) 1998-2001 Andrew Tridgell * Copyright (C) 2000-2001 Martin Pool - * Copyright (C) 2003-2007 Wayne Davison + * Copyright (C) 2003-2008 Wayne Davison * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -37,6 +37,7 @@ extern int protocol_version; extern int preserve_times; extern int uid_ndx; extern int gid_ndx; +extern int progress_is_active; extern int stdout_format_has_i; extern int stdout_format_has_o_or_i; extern int logfile_format_has_i; @@ -320,9 +321,20 @@ void rwrite(enum logcode code, const char *buf, int len, int is_utf8) exit_cleanup(RERR_MESSAGEIO); } + if (progress_is_active) { + fputc('\n', f); + progress_is_active = 0; + } + trailing_CR_or_NL = len && (buf[len-1] == '\n' || buf[len-1] == '\r') ? buf[--len] : 0; + if (len && buf[0] == '\r') { + fputc('\r', f); + buf++; + len--; + } + #ifdef ICONV_CONST if (ic != (iconv_t)-1) { xbuf outbuf, inbuf; @@ -517,7 +529,7 @@ static void log_formatted(enum logcode code, const char *format, const char *op, break; case 'M': n = c = timestring(file->modtime); - while ((c = strchr(p, ' ')) != NULL) + while ((c = strchr(c, ' ')) != NULL) *c = '-'; break; case 'B': @@ -632,15 +644,21 @@ static void log_formatted(enum logcode code, const char *format, const char *op, ? iflags & ITEM_XNAME_FOLLOWS ? 'h' : 'c' : !(iflags & ITEM_TRANSFER) ? '.' : !local_server && *op == 's' ? '<' : '>'; - c[1] = S_ISDIR(file->mode) ? 'd' - : IS_SPECIAL(file->mode) ? 'S' - : IS_DEVICE(file->mode) ? 'D' - : S_ISLNK(file->mode) ? 'L' : 'f'; - c[2] = !(iflags & ITEM_REPORT_CHECKSUM) ? '.' : 'c'; - c[3] = !(iflags & ITEM_REPORT_SIZE) ? '.' : 's'; - c[4] = !(iflags & ITEM_REPORT_TIME) ? '.' - : !preserve_times || (!receiver_symlink_times && S_ISLNK(file->mode)) - ? 'T' : 't'; + if (S_ISLNK(file->mode)) { + c[1] = 'L'; + c[3] = '.'; + c[4] = !(iflags & ITEM_REPORT_TIME) ? '.' + : !preserve_times || !receiver_symlink_times + || (iflags & ITEM_REPORT_TIMEFAIL) ? 'T' : 't'; + } else { + c[1] = S_ISDIR(file->mode) ? 'd' + : IS_SPECIAL(file->mode) ? 'S' + : IS_DEVICE(file->mode) ? 'D' : 'f'; + c[3] = !(iflags & ITEM_REPORT_SIZE) ? '.' : 's'; + c[4] = !(iflags & ITEM_REPORT_TIME) ? '.' + : !preserve_times ? 'T' : 't'; + } + c[2] = !(iflags & ITEM_REPORT_CHANGE) ? '.' : 'c'; c[5] = !(iflags & ITEM_REPORT_PERMS) ? '.' : 'p'; c[6] = !(iflags & ITEM_REPORT_OWNER) ? '.' : 'o'; c[7] = !(iflags & ITEM_REPORT_GROUP) ? '.' : 'g';