Allow the iconv_open() call to fail since we can now fall-back on
authorWayne Davison <wayned@samba.org>
Mon, 6 Feb 2006 16:55:01 +0000 (16:55 +0000)
committerWayne Davison <wayned@samba.org>
Mon, 6 Feb 2006 16:55:01 +0000 (16:55 +0000)
isprint().  Got rid of the "646" mapping kluge too.

rsync.c

diff --git a/rsync.c b/rsync.c
index 48b2520..2be63d5 100644 (file)
--- a/rsync.c
+++ b/rsync.c
@@ -58,10 +58,7 @@ static const char *default_charset(void)
 #if defined HAVE_LIBCHARSET_H && defined HAVE_LOCALE_CHARSET
        return locale_charset();
 #elif defined HAVE_LANGINFO_H && defined HAVE_NL_LANGINFO
-       const char *def = nl_langinfo(CODESET);
-       if (strcmp(def, "646") == 0) /* Solaris brain-damage */
-               return "ASCII";
-       return def;
+       return nl_langinfo(CODESET);
 #else
        return ""; /* Works with (at the very least) gnu iconv... */
 #endif
@@ -69,13 +66,27 @@ static const char *default_charset(void)
 
 void setup_iconv()
 {
-       const char *defset = default_charset();
+       const char *defset;
+       
+       if (!am_server)
+               return;
+
+       defset = default_charset();
 
-       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);
+       /* It's OK if this fails... */
+       ic_chck = iconv_open(defset, defset);
+
+       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