<mbp@samba.org>, Oct 2000.
*/
#include "rsync.h"
+#if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H
+#include <iconv.h>
+#endif
extern int verbose;
extern int dry_run;
extern int daemon_log_format_has_o_or_i;
extern char *auth_user;
extern char *log_format;
+#if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H
+extern iconv_t ic_chck;
+#endif
static int log_initialised;
static int logfile_was_closed;
&& isdigit(*(uchar*)(s+2))
&& isdigit(*(uchar*)(s+3))
&& isdigit(*(uchar*)(s+4)))
- || ((!isprint(*(uchar*)s) || *(uchar*)s < ' ')
- && *s != '\t')) {
+#if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H
+ || (*(uchar*)s < ' ' && *s != '\t')
+#else
+ || ((!isprint(*(uchar*)s) || *(uchar*)s < ' ') && *s != '\t')
+#endif
+ ) {
if (s != buf && fwrite(buf, s - buf, 1, f) != 1)
exit_cleanup(RERR_MESSAGEIO);
fprintf(f, "\\%04o", *(uchar*)s);
trailing_CR_or_NL = len && (buf[len-1] == '\n' || buf[len-1] == '\r')
? buf[--len] : 0;
- filtered_fwrite(buf, len, f);
+#if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H
+ if (ic_chck != (iconv_t)-1) {
+ char convbuf[1024];
+ char *in_buf = buf, *out_buf = convbuf;
+ size_t in_cnt = len, out_cnt = sizeof convbuf - 1;
+
+ iconv(ic_chck, NULL, 0, NULL, 0);
+ while (iconv(ic_chck, &in_buf,&in_cnt,
+ &out_buf,&out_cnt) == (size_t)-1) {
+ if (out_buf != convbuf) {
+ filtered_fwrite(convbuf, out_buf - convbuf, f);
+ out_buf = convbuf;
+ out_cnt = sizeof convbuf - 1;
+ }
+ if (errno == E2BIG)
+ continue;
+ fprintf(f, "\\%04o", *(uchar*)in_buf++);
+ in_cnt--;
+ }
+ if (out_buf != convbuf)
+ filtered_fwrite(convbuf, out_buf - convbuf, f);
+ } else
+#endif
+ filtered_fwrite(buf, len, f);
if (trailing_CR_or_NL) {
fputc(trailing_CR_or_NL, f);
n = buf2;
break;
case 'G':
- strlcat(fmt, "d", sizeof fmt);
- snprintf(buf2, sizeof buf2, fmt,
- (long)file->gid);
- n = buf2;
+ if (file->gid == GID_NONE)
+ n = "DEFAULT";
+ else {
+ strlcat(fmt, "ld", sizeof fmt);
+ snprintf(buf2, sizeof buf2, fmt,
+ (long)file->gid);
+ n = buf2;
+ }
break;
case 'p':
strlcat(fmt, "ld", sizeof fmt);
case 'M':
n = timestring(file->modtime);
{
- char *cp = strchr(n, ' ');
- if (cp)
+ char *cp = n;
+ while ((cp = strchr(cp, ' ')) != NULL)
*cp = '-';
}
break;
/* VANISHED is not an error, only a warning */
if (code == RERR_VANISHED) {
- rprintf(FINFO, "rsync warning: %s (code %d) at %s(%d)\n",
- name, code, file, line);
+ rprintf(FINFO, "rsync warning: %s (code %d) at %s(%d) [%s]\n",
+ name, code, file, line, who_am_i());
} else {
- rprintf(FERROR, "rsync error: %s (code %d) at %s(%d)\n",
- name, code, file, line);
+ rprintf(FERROR, "rsync error: %s (code %d) at %s(%d) [%s]\n",
+ name, code, file, line, who_am_i());
}
}
}