mirror of
https://github.com/samba-team/samba.git
synced 2025-02-02 09:47:23 +03:00
lib/util/charset Add back setlocale(), but only when called from binaries
When called from a library, we don't want to call this, as we may overwrite some of our calling program's context. Andrew Bartlett Autobuild-User: Andrew Bartlett <abartlet@samba.org> Autobuild-Date: Fri Feb 18 09:29:35 CET 2011 on sn-devel-104
This commit is contained in:
parent
2a3a86a86f
commit
1ad8e5229f
@ -223,6 +223,7 @@ smb_iconv_t smb_iconv_open_ex(TALLOC_CTX *mem_ctx, const char *tocode,
|
||||
const char *fromcode, bool native_iconv);
|
||||
|
||||
void load_case_tables(void);
|
||||
void load_case_tables_library(void);
|
||||
bool smb_register_charset(const struct charset_functions *funcs_in);
|
||||
|
||||
/*
|
||||
|
@ -42,8 +42,10 @@ static void *lowcase_table;
|
||||
|
||||
/*******************************************************************
|
||||
load the case handling tables
|
||||
|
||||
This is the function that should be called from library code.
|
||||
********************************************************************/
|
||||
void load_case_tables(void)
|
||||
void load_case_tables_library(void)
|
||||
{
|
||||
TALLOC_CTX *mem_ctx;
|
||||
|
||||
@ -64,6 +66,24 @@ void load_case_tables(void)
|
||||
}
|
||||
}
|
||||
|
||||
/*******************************************************************
|
||||
load the case handling tables
|
||||
|
||||
This MUST only be called from main() in application code, never from a
|
||||
library. We don't know if the calling program has already done
|
||||
setlocale() to another value, and can't tell if they have.
|
||||
********************************************************************/
|
||||
void load_case_tables(void)
|
||||
{
|
||||
/* This is a useful global hook where we can ensure that the
|
||||
* locale is set from the environment. This is needed so that
|
||||
* we can use LOCALE as a codepage */
|
||||
#ifdef HAVE_SETLOCALE
|
||||
setlocale(LC_ALL, "");
|
||||
#endif
|
||||
load_case_tables_library();
|
||||
}
|
||||
|
||||
/**
|
||||
Convert a codepoint_t to upper case.
|
||||
**/
|
||||
@ -73,7 +93,7 @@ _PUBLIC_ codepoint_t toupper_m(codepoint_t val)
|
||||
return toupper(val);
|
||||
}
|
||||
if (upcase_table == NULL) {
|
||||
load_case_tables();
|
||||
load_case_tables_library();
|
||||
}
|
||||
if (upcase_table == (void *)-1) {
|
||||
return val;
|
||||
@ -93,7 +113,7 @@ _PUBLIC_ codepoint_t tolower_m(codepoint_t val)
|
||||
return tolower(val);
|
||||
}
|
||||
if (lowcase_table == NULL) {
|
||||
load_case_tables();
|
||||
load_case_tables_library();
|
||||
}
|
||||
if (lowcase_table == (void *)-1) {
|
||||
return val;
|
||||
|
@ -48,7 +48,7 @@ NSS_STATUS _nss_wins_gethostbyname2_r(const char *name, int af, struct hostent *
|
||||
static void nss_wins_init(void)
|
||||
{
|
||||
initialised = 1;
|
||||
load_case_tables();
|
||||
load_case_tables_library();
|
||||
lp_set_cmdline("log level", "0");
|
||||
|
||||
TimeInit();
|
||||
|
@ -51,7 +51,7 @@ static bool initialized;
|
||||
void lazy_initialize_conv(void)
|
||||
{
|
||||
if (!initialized) {
|
||||
load_case_tables();
|
||||
load_case_tables_library();
|
||||
init_iconv();
|
||||
initialized = true;
|
||||
}
|
||||
|
@ -68,7 +68,7 @@ NET_API_STATUS libnetapi_init(struct libnetapi_ctx **context)
|
||||
frame = talloc_stackframe();
|
||||
|
||||
/* Case tables must be loaded before any string comparisons occour */
|
||||
load_case_tables();
|
||||
load_case_tables_library();
|
||||
|
||||
/* When libnetapi is invoked from an application, it does not
|
||||
* want to be swamped with level 10 debug messages, even if
|
||||
|
@ -45,7 +45,7 @@ SMBC_module_init(void * punused)
|
||||
char *home = NULL;
|
||||
TALLOC_CTX *frame = talloc_stackframe();
|
||||
|
||||
load_case_tables();
|
||||
load_case_tables_library();
|
||||
|
||||
setup_logging("libsmbclient", DEBUG_STDOUT);
|
||||
|
||||
|
@ -57,7 +57,7 @@ int pam_sm_acct_mgmt( pam_handle_t *pamh, int flags,
|
||||
void (*oldsig_handler)(int);
|
||||
|
||||
/* Samba initialization. */
|
||||
load_case_tables();
|
||||
load_case_tables_library();
|
||||
lp_set_in_client(True);
|
||||
|
||||
ctrl = set_ctrl(pamh, flags, argc, argv );
|
||||
|
@ -80,7 +80,7 @@ int pam_sm_authenticate(pam_handle_t *pamh, int flags,
|
||||
char *p = NULL;
|
||||
|
||||
/* Samba initialization. */
|
||||
load_case_tables();
|
||||
load_case_tables_library();
|
||||
lp_set_in_client(True);
|
||||
|
||||
ctrl = set_ctrl(pamh, flags, argc, argv);
|
||||
|
@ -105,7 +105,7 @@ int pam_sm_chauthtok(pam_handle_t *pamh, int flags,
|
||||
char *pass_new;
|
||||
|
||||
/* Samba initialization. */
|
||||
load_case_tables();
|
||||
load_case_tables_library();
|
||||
lp_set_in_client(True);
|
||||
|
||||
ctrl = set_ctrl(pamh, flags, argc, argv);
|
||||
|
Loading…
x
Reference in New Issue
Block a user