Split up the ifuncs.h file into 3 .h files.
[rsync/rsync.git] / log.c
diff --git a/log.c b/log.c
index 5d59419..991b7cc 100644 (file)
--- a/log.c
+++ b/log.c
@@ -20,7 +20,8 @@
  */
 
 #include "rsync.h"
-#include "ifuncs.h"
+#include "itypes.h"
+#include "inums.h"
 
 extern int dry_run;
 extern int am_daemon;
@@ -53,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 curr_dir[MAXPATHLEN];
 extern char *module_dir;
 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;
@@ -88,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" },
@@ -246,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
@@ -258,20 +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) {
-               f = stderr;
+       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;
@@ -312,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;
@@ -323,13 +328,12 @@ 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);
        }
 
-output_msg:
        if (output_needs_newline) {
                fputc('\n', f);
                output_needs_newline = 0;
@@ -351,7 +355,7 @@ output_msg:
                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);
@@ -449,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;
@@ -511,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':
@@ -628,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':
@@ -640,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':
@@ -851,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;