AC_CHECK_HEADERS(sys/termio.h sys/statfs.h sys/dustat.h sys/statvfs.h stdarg.h sys/sockio.h)
AC_CHECK_HEADERS(security/pam_modules.h security/_pam_macros.h dlfcn.h)
AC_CHECK_HEADERS(sys/syslog.h syslog.h execinfo.h)
+AC_CHECK_HEADERS(langinfo.h locale.h)
# In valgrind 1.0.x, it's just valgrind.h. In 1.9.x+ there's a
# subdirectory of headers.
AC_CHECK_FUNCS(fseek64 fseeko64 ftell64 ftello64 setluid getpwanam setlinebuf)
AC_CHECK_FUNCS(srandom random srand rand setenv usleep strcasecmp fcvt fcvtl symlink readlink)
AC_CHECK_FUNCS(syslog vsyslog getgrouplist timegm)
+AC_CHECK_FUNCS(setlocale nl_langinfo)
# setbuffer, shmget, shm_open are needed for smbtorture
AC_CHECK_FUNCS(setbuffer shmget shm_open backtrace_symbols)
if (!conv_handles[CH_UCS2][CH_UNIX])
conv_handles[CH_UCS2][CH_UNIX] = smb_iconv_open("ASCII", "UCS-2LE");
+#ifdef HAVE_SETLOCALE
+ setlocale(LC_ALL, "");
+#endif
+
for (c1=0;c1<NUM_CHARSETS;c1++) {
for (c2=0;c2<NUM_CHARSETS;c2++) {
const char *n1 = charset_name((charset_t)c1);
const char *n2 = charset_name((charset_t)c2);
+#ifdef HAVE_NL_LANGINFO
+ const char *ln = nl_langinfo(CODESET);
+
+ if (c1==CH_DISPLAY && conv_handles[c1][c2] &&
+ strcmp(ln, conv_handles[c1][c2]->from_name) == 0 &&
+ strcmp(n2, conv_handles[c1][c2]->to_name) == 0)
+ continue;
+
+ if (c2==CH_DISPLAY && conv_handles[c1][c2] &&
+ strcmp(n1, conv_handles[c1][c2]->from_name) == 0 &&
+ strcmp(ln, conv_handles[c1][c2]->to_name) == 0)
+ continue;
+
+#endif
if (conv_handles[c1][c2] &&
strcmp(n1, conv_handles[c1][c2]->from_name) == 0 &&
strcmp(n2, conv_handles[c1][c2]->to_name) == 0)
if (conv_handles[c1][c2])
smb_iconv_close(conv_handles[c1][c2]);
+#ifdef HAVE_NL_LANGINFO
+ if (c1==CH_DISPLAY && c2==CH_DISPLAY) {
+ conv_handles[c1][c2] = smb_iconv_open(ln,ln);
+ if (conv_handles[c1][c2] != (smb_iconv_t)-1) {
+ continue;
+ }
+ } else if (c1==CH_DISPLAY) {
+ conv_handles[c1][c2] = smb_iconv_open(n2,ln);
+ if (conv_handles[c1][c2] != (smb_iconv_t)-1) {
+ continue;
+ }
+ } else if (c2==CH_DISPLAY) {
+ conv_handles[c1][c2] = smb_iconv_open(ln,n1);
+ if (conv_handles[c1][c2] != (smb_iconv_t)-1) {
+ continue;
+ }
+ }
+ /* Fall back to the configured charset. */
+#endif
conv_handles[c1][c2] = smb_iconv_open(n2,n1);
if (conv_handles[c1][c2] == (smb_iconv_t)-1) {
DEBUG(0,("Conversion from %s to %s not supported\n",