- The iconv-supporting code can now ask filtered_fwrite() to use
[rsync/rsync.git] / rsync.c
diff --git a/rsync.c b/rsync.c
index 2a2505a..48b2520 100644 (file)
--- a/rsync.c
+++ b/rsync.c
@@ -50,15 +50,18 @@ extern int keep_dirlinks;
 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();
 #elif defined HAVE_LANGINFO_H && defined HAVE_NL_LANGINFO
-       return nl_langinfo(CODESET);
+       const char *def = nl_langinfo(CODESET);
+       if (strcmp(def, "646") == 0) /* Solaris brain-damage */
+               return "ASCII";
+       return def;
 #else
        return ""; /* Works with (at the very least) gnu iconv... */
 #endif
@@ -66,7 +69,7 @@ static char *default_charset(void)
 
 void setup_iconv()
 {
-       char *defset = default_charset();
+       const char *defset = default_charset();
 
        if (!am_server
         && (ic_chck = iconv_open(defset, defset)) == (iconv_t)-1) {