*/
#include "rsync.h"
-#include "ifuncs.h"
+#include "itypes.h"
+#include "inums.h"
extern int dry_run;
extern int am_daemon;
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[MAXPATHLEN];
extern char *module_dir;
{ 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" },
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
if (len < 0)
exit_cleanup(RERR_MESSAGEIO);
- if (msgs2stderr > 0 && code != FLOG)
+ 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;
/* TODO: can we send the error to the user somehow? */
return;
}
- msgs2stderr = -1;
+ f = stderr;
}
output_msg:
break;
case FINFO:
case FCLIENT:
- f = msgs2stderr ? stderr : stdout;
break;
default:
exit_cleanup(RERR_MESSAGEIO);
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);
void rflush(enum logcode code)
{
- FILE *f = NULL;
+ FILE *f;
if (am_daemon || code == FLOG)
return;
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':
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':
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':
{
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;