mirror of
https://github.com/samba-team/samba.git
synced 2025-01-12 09:18:10 +03:00
Patch from vorlon@debian.org, see bugzilal #122
Samba should preferentially use the locale information from the native system,
and only fall back on 'display charset' if this is unavailable or unsupported.
(This used to be commit 1e445fb422
)
This commit is contained in:
parent
5d4937c2b6
commit
489956c823
@ -529,6 +529,7 @@ AC_CHECK_HEADERS(sys/mount.h sys/vfs.h sys/fs/s5param.h sys/filsys.h termios.h t
|
||||
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.
|
||||
@ -843,6 +844,7 @@ AC_CHECK_FUNCS(lstat64 fopen64 atexit grantpt dup2 lseek64 ftruncate64 readdir64
|
||||
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)
|
||||
|
||||
|
@ -441,6 +441,14 @@
|
||||
#include <attr/xattr.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_LOCALE_H
|
||||
#include <locale.h>
|
||||
#endif
|
||||
|
||||
#if HAVE_LANGINFO_H
|
||||
#include <langinfo.h>
|
||||
#endif
|
||||
|
||||
/* Special macros that are no-ops except when run under Valgrind on
|
||||
* x86. They've moved a little bit from valgrind 1.0.4 to 1.9.4 */
|
||||
#if HAVE_VALGRIND_MEMCHECK_H
|
||||
|
@ -90,10 +90,28 @@ void init_iconv(void)
|
||||
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)
|
||||
@ -104,6 +122,25 @@ void init_iconv(void)
|
||||
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",
|
||||
|
Loading…
Reference in New Issue
Block a user