1
0
mirror of https://github.com/samba-team/samba.git synced 2025-01-25 06:04:04 +03:00

r4267: fixed the charset code to use the builtin_functions.

Jelmer, please be more careful about testing new code. Your charsets
register change completely broke charset handling on systems without
iconv, and slowed every system down as the builtins were not being
used at all.
This commit is contained in:
Andrew Tridgell 2004-12-19 00:13:24 +00:00 committed by Gerald (Jerry) Carter
parent 89845388ea
commit 0022b4d24c

View File

@ -67,8 +67,7 @@ static const struct charset_functions builtin_functions[] = {
{"UTF8", utf8_pull, utf8_push},
{"UTF-8", utf8_pull, utf8_push},
{"ASCII", ascii_pull, ascii_push},
{"UCS2-HEX", ucs2hex_pull, ucs2hex_push},
{NULL, NULL, NULL}
{"UCS2-HEX", ucs2hex_pull, ucs2hex_push}
};
static struct charset_functions *charsets = NULL;
@ -161,10 +160,8 @@ static BOOL is_utf16(const char *name)
smb_iconv_t smb_iconv_open(const char *tocode, const char *fromcode)
{
smb_iconv_t ret;
struct charset_functions *from, *to;
from = charsets;
to = charsets;
const struct charset_functions *from=NULL, *to=NULL;
int i;
ret = (smb_iconv_t)talloc_named(NULL, sizeof(*ret),
"iconv(%s,%s)", tocode, fromcode);
@ -180,14 +177,25 @@ smb_iconv_t smb_iconv_open(const char *tocode, const char *fromcode)
return ret;
}
while (from) {
if (strcasecmp(from->name, fromcode) == 0) break;
from = from->next;
for (i=0;i<ARRAY_SIZE(builtin_functions);i++) {
if (strcasecmp(fromcode, builtin_functions[i].name) == 0) {
from = &builtin_functions[i];
}
if (strcasecmp(tocode, builtin_functions[i].name) == 0) {
to = &builtin_functions[i];
}
}
while (to) {
if (strcasecmp(to->name, tocode) == 0) break;
to = to->next;
if (from == NULL) {
for (from=charsets; from; from=from->next) {
if (strcasecmp(from->name, fromcode) == 0) break;
}
}
if (to == NULL) {
for (to=charsets; to; to=to->next) {
if (strcasecmp(to->name, tocode) == 0) break;
}
}
#ifdef HAVE_NATIVE_ICONV