Update the copyright year.
[rsync/rsync.git] / log.c
diff --git a/log.c b/log.c
index 8f8f049..551cb06 100644 (file)
--- a/log.c
+++ b/log.c
@@ -3,7 +3,7 @@
  *
  * Copyright (C) 1998-2001 Andrew Tridgell <tridge@samba.org>
  * Copyright (C) 2000-2001 Martin Pool <mbp@samba.org>
- * 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
@@ -20,7 +20,8 @@
  */
 
 #include "rsync.h"
-#include "ifuncs.h"
+#include "itypes.h"
+#include "inums.h"
 
 extern int dry_run;
 extern int am_daemon;
@@ -36,6 +37,7 @@ 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;
@@ -52,12 +54,12 @@ extern char *logfile_name;
 extern iconv_t ic_chck;
 #endif
 #ifdef ICONV_OPTION
-extern iconv_t ic_send, ic_recv;
+extern iconv_t ic_recv;
 #endif
-extern char curr_dir[];
-extern char *module_dir;
+extern char curr_dir[MAXPATHLEN];
+extern char *full_module_path;
 extern unsigned int module_dirlen;
-extern char sender_file_sum[];
+extern char sender_file_sum[MAX_DIGEST_LEN];
 
 static int log_initialised;
 static int logfile_was_closed;
@@ -87,7 +89,7 @@ struct {
        { RERR_SIGNAL     , "received SIGINT, SIGTERM, or SIGHUP" },
        { RERR_WAITCHILD  , "waitpid() failed" },
        { RERR_MALLOC     , "error allocating core memory buffers" },
-       { RERR_PARTIAL    , "some files could not be transferred" },
+       { RERR_PARTIAL    , "some files/attrs were not transferred (see previous errors)" },
        { RERR_VANISHED   , "some files vanished before they could be transferred" },
        { RERR_TIMEOUT    , "timeout in data send/receive" },
        { RERR_CONTIMEOUT , "timeout waiting for daemon connection" },
@@ -245,7 +247,7 @@ static void filtered_fwrite(FILE *f, const char *buf, int len, int use_isprint)
 void rwrite(enum logcode code, const char *buf, int len, int is_utf8)
 {
        int trailing_CR_or_NL;
-       FILE *f = NULL;
+       FILE *f = msgs2stderr ? stderr : stdout;
 #ifdef ICONV_OPTION
        iconv_t ic = is_utf8 && ic_recv != (iconv_t)-1 ? ic_recv : ic_chck;
 #else
@@ -257,15 +259,22 @@ void rwrite(enum logcode code, const char *buf, int len, int is_utf8)
        if (len < 0)
                exit_cleanup(RERR_MESSAGEIO);
 
+       if (msgs2stderr && code != FLOG)
+               goto output_msg;
+
        if (am_server && msg_fd_out >= 0) {
                assert(!is_utf8);
-               /* Pass the message to our sibling. */
+               /* Pass the message to our sibling in native charset. */
                send_msg((enum msgcode)code, buf, len, 0);
                return;
        }
 
        if (code == FERROR_SOCKET) /* This gets simplified for a non-sibling. */
                code = FERROR;
+       else if (code == FERROR_UTF8) {
+               is_utf8 = 1;
+               code = FERROR;
+       }
 
        if (code == FCLIENT)
                code = FINFO;
@@ -306,8 +315,10 @@ void rwrite(enum logcode code, const char *buf, int len, int is_utf8)
                        /* TODO: can we send the error to the user somehow? */
                        return;
                }
+               f = stderr;
        }
 
+output_msg:
        switch (code) {
        case FERROR_XFER:
                got_xfer_error = 1;
@@ -317,7 +328,7 @@ void rwrite(enum logcode code, const char *buf, int len, int is_utf8)
                f = stderr;
                break;
        case FINFO:
-               f = am_server ? stderr : stdout;
+       case FCLIENT:
                break;
        default:
                exit_cleanup(RERR_MESSAGEIO);
@@ -344,7 +355,7 @@ void rwrite(enum logcode code, const char *buf, int len, int is_utf8)
                int ierrno;
 
                INIT_CONST_XBUF(outbuf, convbuf);
-               INIT_XBUF(inbuf, (char*)buf, len, -1);
+               INIT_XBUF(inbuf, (char*)buf, len, (size_t)-1);
 
                while (inbuf.len) {
                        iconvbufs(ic, &inbuf, &outbuf, 0);
@@ -442,7 +453,7 @@ void rsyserr(enum logcode code, int errcode, const char *format, ...)
 
 void rflush(enum logcode code)
 {
-       FILE *f = NULL;
+       FILE *f;
 
        if (am_daemon || code == FLOG)
                return;
@@ -504,7 +515,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,
-                                big_num(F_LENGTH(file), 0));
+                                comma_num(F_LENGTH(file)));
                        n = buf2;
                        break;
                case 'U':
@@ -607,7 +618,7 @@ static void log_formatted(enum logcode code, const char *format, const char *op,
                        n = timestring(time(NULL));
                        break;
                case 'P':
-                       n = module_dir;
+                       n = full_module_path;
                        break;
                case 'u':
                        n = auth_user;
@@ -621,7 +632,7 @@ 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, big_num(b, 0));
+                       snprintf(buf2, sizeof buf2, fmt, comma_num(b));
                        n = buf2;
                        break;
                case 'c':
@@ -633,7 +644,7 @@ 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, big_num(b, 0));
+                       snprintf(buf2, sizeof buf2, fmt, comma_num(b));
                        n = buf2;
                        break;
                case 'C':
@@ -844,9 +855,9 @@ void log_exit(int code, const char *file, int line)
 {
        if (code == 0) {
                rprintf(FLOG,"sent %s bytes  received %s bytes  total size %s\n",
-                       big_num(stats.total_written, 0),
-                       big_num(stats.total_read, 0),
-                       big_num(stats.total_size, 0));
+                       comma_num(stats.total_written),
+                       comma_num(stats.total_read),
+                       comma_num(stats.total_size));
        } else if (am_server != 2) {
                const char *name;