Mercurial > sdl-ios-xcode
diff src/stdlib/SDL_iconv.c @ 4053:0aadbc81c497 SDL-1.2
Fixed bug #455
If passed "" for the character set, let iconv_open() interpret it as
locale.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Thu, 12 Jul 2007 07:29:19 +0000 |
parents | 098ac044cd2f |
children | 64bf737873a2 |
line wrap: on
line diff
--- 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;