# HG changeset patch # User Sam Lantinga # Date 1184225359 0 # Node ID 0aadbc81c4975eb88c30eb4e09c87f96261e4eb4 # Parent b004c6c24a9852b0b246f4df4bd2c54bf162dac4 Fixed bug #455 If passed "" for the character set, let iconv_open() interpret it as locale. diff -r b004c6c24a98 -r 0aadbc81c497 src/stdlib/SDL_iconv.c --- a/src/stdlib/SDL_iconv.c Thu Jul 12 05:30:17 2007 +0000 +++ b/src/stdlib/SDL_iconv.c Thu Jul 12 07:29:19 2007 +0000 @@ -107,10 +107,8 @@ const char *name; int format; } encodings[] = { - { "646", ENCODING_ASCII }, { "ASCII", ENCODING_ASCII }, { "US-ASCII", ENCODING_ASCII }, - { "LATIN1", ENCODING_LATIN1 }, { "8859-1", ENCODING_LATIN1 }, { "ISO-8859-1", ENCODING_LATIN1 }, { "UTF8", ENCODING_UTF8 }, @@ -133,12 +131,38 @@ { "UCS-4", ENCODING_UCS4 }, }; +static const char *getlocale() +{ + const char *lang; + + lang = SDL_getenv("LC_ALL"); + if ( !lang ) { + lang = SDL_getenv("LC_CTYPE"); + } + if ( !lang ) { + lang = SDL_getenv("LC_MESSAGES"); + } + if ( !lang ) { + lang = SDL_getenv("LANG"); + } + if ( !lang || !*lang || SDL_strcmp(lang, "C") == 0 ) { + lang = "ASCII"; + } + return lang; +} + SDL_iconv_t SDL_iconv_open(const char *tocode, const char *fromcode) { int src_fmt = ENCODING_UNKNOWN; int dst_fmt = ENCODING_UNKNOWN; int i; + if ( !fromcode || !*fromcode ) { + fromcode = getlocale(); + } + if ( !tocode || !*tocode ) { + fromcode = getlocale(); + } for ( i = 0; i < SDL_arraysize(encodings); ++i ) { if ( SDL_strcasecmp(fromcode, encodings[i].name) == 0 ) { src_fmt = encodings[i].format; @@ -772,26 +796,6 @@ #endif /* !HAVE_ICONV */ -static const char *getlocale() -{ - const char *lang; - - lang = SDL_getenv("LC_ALL"); - if ( !lang ) { - lang = SDL_getenv("LC_CTYPE"); - } - if ( !lang ) { - lang = SDL_getenv("LC_MESSAGES"); - } - if ( !lang ) { - lang = SDL_getenv("LANG"); - } - if ( !lang || SDL_strcmp(lang, "C") == 0 ) { - lang = "ASCII"; - } - return lang; -} - char *SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, size_t inbytesleft) { SDL_iconv_t cd; @@ -801,12 +805,6 @@ size_t outbytesleft; size_t retCode = 0; - if ( !fromcode || !*fromcode ) { - fromcode = getlocale(); - } - if ( !tocode || !*tocode ) { - tocode = getlocale(); - } cd = SDL_iconv_open(tocode, fromcode); if ( cd == (SDL_iconv_t)-1 ) { return NULL;