process */
#include "rsync.h"
+#if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H
+#include <iconv.h>
+#endif
+#if defined HAVE_LIBCHARSET_H && defined HAVE_LOCALE_CHARSET
+#include <libcharset.h>
+#elif defined HAVE_LANGINFO_H && defined HAVE_NL_LANGINFO
+#include <langinfo.h>
+#endif
extern int verbose;
extern int dry_run;
extern int make_backups;
extern struct stats stats;
+#if defined HAVE_ICONV_OPEN && defined HAVE_ICONV_H
+iconv_t ic_chck = (iconv_t)-1;
+
+static 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
+ 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
+}
+
+void setup_iconv()
+{
+ char *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);
+ }
+}
+#endif
/*
free a sums struct