X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/433c6753a83d070dad5526989e62cce426c0432e..d8a7290f8621b72139461ed6606cde31fa4d544f:/log.c diff --git a/log.c b/log.c index 333e55d7..61d01ce5 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-2008 Wayne Davison + * Copyright (C) 2003-2009 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 @@ -31,7 +31,6 @@ extern int am_generator; 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; @@ -57,8 +56,10 @@ extern iconv_t ic_chck; extern iconv_t ic_recv; #endif extern char curr_dir[MAXPATHLEN]; +extern char *full_module_path; extern unsigned int module_dirlen; extern char sender_file_sum[MAX_DIGEST_LEN]; +extern const char undetermined_hostname[]; static int log_initialised; static int logfile_was_closed; @@ -67,6 +68,7 @@ struct stats stats; int got_xfer_error = 0; int output_needs_newline = 0; +int send_msgs_to_gen = 0; struct { int code; @@ -261,7 +263,7 @@ void rwrite(enum logcode code, const char *buf, int len, int is_utf8) if (msgs2stderr && code != FLOG) goto output_msg; - if (am_server && msg_fd_out >= 0) { + if (send_msgs_to_gen) { assert(!is_utf8); /* Pass the message to our sibling in native charset. */ send_msg((enum msgcode)code, buf, len, 0); @@ -357,7 +359,7 @@ output_msg: INIT_XBUF(inbuf, (char*)buf, len, (size_t)-1); while (inbuf.len) { - iconvbufs(ic, &inbuf, &outbuf, 0); + iconvbufs(ic, &inbuf, &outbuf, inbuf.pos ? 0 : ICB_INIT); ierrno = errno; if (outbuf.len) { filtered_fwrite(f, convbuf, outbuf.len, 0); @@ -491,21 +493,36 @@ static void log_formatted(enum logcode code, const char *format, const char *op, buf[total] = '\0'; for (p = buf; (p = strchr(p, '%')) != NULL; ) { + int humanize = 0; s = p++; c = fmt + 1; + while (*p == '\'') { + humanize++; + p++; + } if (*p == '-') *c++ = *p++; while (isDigit(p) && c - fmt < (int)(sizeof fmt) - 8) *c++ = *p++; + while (*p == '\'') { + humanize++; + p++; + } if (!*p) break; *c = '\0'; n = NULL; + /* Note for %h and %a: it doesn't matter what fd we pass to + * client_{name,addr} because rsync_module will already have + * forced the answer to be cached (assuming, of course, for %h + * that lp_reverse_lookup(module_id) is true). */ switch (*p) { case 'h': - if (am_daemon) - n = client_name(0); + if (am_daemon) { + n = lp_reverse_lookup(module_id) + ? client_name(0) : undetermined_hostname; + } break; case 'a': if (am_daemon) @@ -514,7 +531,7 @@ static void log_formatted(enum logcode code, const char *format, const char *op, case 'l': strlcat(fmt, "s", sizeof fmt); snprintf(buf2, sizeof buf2, fmt, - comma_num(F_LENGTH(file))); + do_big_num(F_LENGTH(file), humanize, NULL)); n = buf2; break; case 'U': @@ -617,7 +634,7 @@ static void log_formatted(enum logcode code, const char *format, const char *op, n = timestring(time(NULL)); break; case 'P': - n = lp_path(module_id); + n = full_module_path; break; case 'u': n = auth_user; @@ -631,7 +648,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op, initial_stats->total_read; } strlcat(fmt, "s", sizeof fmt); - snprintf(buf2, sizeof buf2, fmt, comma_num(b)); + snprintf(buf2, sizeof buf2, fmt, + do_big_num(b, humanize, NULL)); n = buf2; break; case 'c': @@ -643,7 +661,8 @@ static void log_formatted(enum logcode code, const char *format, const char *op, initial_stats->total_read; } strlcat(fmt, "s", sizeof fmt); - snprintf(buf2, sizeof buf2, fmt, comma_num(b)); + snprintf(buf2, sizeof buf2, fmt, + do_big_num(b, humanize, NULL)); n = buf2; break; case 'C':