extern int am_sender;
extern int am_generator;
extern int am_starting_up;
+extern int allow_8bit_chars;
extern int preserve_uid;
extern int preserve_gid;
extern int inplace;
extern int make_backups;
extern struct stats stats;
-#ifdef HAVE_ICONV_OPEN
+#if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H
iconv_t ic_chck = (iconv_t)-1;
-static char *default_charset(void)
+static const char *default_charset(void)
{
#if defined HAVE_LIBCHARSET_H && defined HAVE_LOCALE_CHARSET
return locale_charset();
void setup_iconv()
{
- char *defset = default_charset();
+ if (!am_server && !allow_8bit_chars) {
+ const char *defset = default_charset();
+
+ /* It's OK if this fails... */
+ ic_chck = iconv_open(defset, defset);
- if (!am_server
- && (ic_chck = iconv_open(defset, defset)) == (iconv_t)-1) {
- rprintf(FERROR, "iconv_open(\"%s\", \"%s\") failed\n",
- defset, defset);
- exit_cleanup(RERR_UNSUPPORTED);
+ if (verbose > 3) {
+ if (ic_chck == (iconv_t)-1) {
+ rprintf(FINFO,
+ "note: iconv_open(\"%s\", \"%s\") failed (%d)"
+ " -- using isprint() instead of iconv().\n",
+ defset, defset, errno);
+ } else {
+ rprintf(FINFO,
+ "note: iconv_open(\"%s\", \"%s\") succeeded.\n",
+ defset, defset);
+ }
+ }
}
}
#endif