X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/6d56efa6ea66afa2e6f4eb79d9dd5f3b54b723c3..ced4fd89932ce510c32e517add56a77bc4b185b2:/log.c diff --git a/log.c b/log.c index 2d828c13..5d59419e 100644 --- a/log.c +++ b/log.c @@ -31,9 +31,12 @@ extern int local_server; extern int quiet; extern int module_id; extern int msg_fd_out; +extern int checksum_len; extern int allow_8bit_chars; extern int protocol_version; +extern int always_checksum; extern int preserve_times; +extern int msgs2stderr; extern int uid_ndx; extern int gid_ndx; extern int stdout_format_has_i; @@ -55,6 +58,7 @@ extern iconv_t ic_send, ic_recv; extern char curr_dir[]; extern char *module_dir; extern unsigned int module_dirlen; +extern char sender_file_sum[]; static int log_initialised; static int logfile_was_closed; @@ -254,6 +258,11 @@ void rwrite(enum logcode code, const char *buf, int len, int is_utf8) if (len < 0) exit_cleanup(RERR_MESSAGEIO); + if (msgs2stderr && code != FLOG) { + f = stderr; + goto output_msg; + } + if (am_server && msg_fd_out >= 0) { assert(!is_utf8); /* Pass the message to our sibling. */ @@ -320,6 +329,7 @@ void rwrite(enum logcode code, const char *buf, int len, int is_utf8) exit_cleanup(RERR_MESSAGEIO); } +output_msg: if (output_needs_newline) { fputc('\n', f); output_needs_newline = 0; @@ -499,9 +509,9 @@ static void log_formatted(enum logcode code, const char *format, const char *op, n = client_addr(0); break; case 'l': - strlcat(fmt, ".0f", sizeof fmt); + strlcat(fmt, "s", sizeof fmt); snprintf(buf2, sizeof buf2, fmt, - (double)F_LENGTH(file)); + big_num(F_LENGTH(file), 0)); n = buf2; break; case 'U': @@ -617,8 +627,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op, b = stats.total_read - initial_stats->total_read; } - strlcat(fmt, ".0f", sizeof fmt); - snprintf(buf2, sizeof buf2, fmt, (double)b); + strlcat(fmt, "s", sizeof fmt); + snprintf(buf2, sizeof buf2, fmt, big_num(b, 0)); n = buf2; break; case 'c': @@ -629,8 +639,30 @@ static void log_formatted(enum logcode code, const char *format, const char *op, b = stats.total_read - initial_stats->total_read; } - strlcat(fmt, ".0f", sizeof fmt); - snprintf(buf2, sizeof buf2, fmt, (double)b); + strlcat(fmt, "s", sizeof fmt); + snprintf(buf2, sizeof buf2, fmt, big_num(b, 0)); + n = buf2; + break; + case 'C': + if (protocol_version >= 30 + && (iflags & ITEM_TRANSFER + || (always_checksum && S_ISREG(file->mode)))) { + int i, x1, x2; + const char *sum = iflags & ITEM_TRANSFER + ? sender_file_sum : F_SUM(file); + c = buf2 + checksum_len*2; + *c = '\0'; + for (i = checksum_len; --i >= 0; ) { + x1 = CVAL(sum, i); + x2 = x1 >> 4; + x1 &= 0xF; + *--c = x1 <= 9 ? x1 + '0' : x1 + 'a' - 10; + *--c = x2 <= 9 ? x2 + '0' : x2 + 'a' - 10; + } + } else { + memset(buf2, ' ', checksum_len*2); + buf2[checksum_len*2] = '\0'; + } n = buf2; break; case 'i':