Mercurial > sdl-ios-xcode
changeset 2143:e906da4414a3
Fix for bug #447 merged from SDL 1.2
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 04 Jul 2007 08:01:04 +0000 |
parents | ca80c942e69c |
children | 665c2669e6a3 |
files | include/SDL_stdinc.h src/stdlib/SDL_iconv.c src/video/x11/SDL_x11window.c test/testiconv.c |
diffstat | 4 files changed, 38 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/include/SDL_stdinc.h Wed Jul 04 07:08:16 2007 +0000 +++ b/include/SDL_stdinc.h Wed Jul 04 08:01:04 2007 +0000 @@ -656,8 +656,7 @@ const char *fromcode, const char *inbuf, size_t inbytesleft); -#define SDL_iconv_utf8_ascii(S) SDL_iconv_string("646", "UTF-8", S, SDL_strlen(S)+1) -#define SDL_iconv_utf8_latin1(S) SDL_iconv_string("8859-1", "UTF-8", S, SDL_strlen(S)+1) +#define SDL_iconv_utf8_locale(S) SDL_iconv_string("", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs2(S) (Uint16 *)SDL_iconv_string("UCS-2", "UTF-8", S, SDL_strlen(S)+1) #define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1)
--- a/src/stdlib/SDL_iconv.c Wed Jul 04 07:08:16 2007 +0000 +++ b/src/stdlib/SDL_iconv.c Wed Jul 04 08:01:04 2007 +0000 @@ -773,6 +773,27 @@ #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) @@ -784,6 +805,12 @@ 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;
--- a/src/video/x11/SDL_x11window.c Wed Jul 04 07:08:16 2007 +0000 +++ b/src/video/x11/SDL_x11window.c Wed Jul 04 08:01:04 2007 +0000 @@ -429,13 +429,13 @@ #endif if (title != NULL) { - char *title_latin1 = SDL_iconv_utf8_latin1((char *) title); - if (!title_latin1) { + char *title_locale = SDL_iconv_utf8_locale(title); + if (!title_locale) { SDL_OutOfMemory(); return; } - status = XStringListToTextProperty(&title_latin1, 1, &titleprop); - SDL_free(title_latin1); + status = XStringListToTextProperty(&title_locale, 1, &titleprop); + SDL_free(title_locale); if (status) { XSetTextProperty(display, data->window, &titleprop, XA_WM_NAME); XFree(titleprop.value); @@ -454,13 +454,13 @@ #endif } if (icon != NULL) { - char *icon_latin1 = SDL_iconv_utf8_latin1((char *) icon); - if (!icon_latin1) { + char *icon_locale = SDL_iconv_utf8_locale(icon); + if (!icon_locale) { SDL_OutOfMemory(); return; } - status = XStringListToTextProperty(&icon_latin1, 1, &iconprop); - SDL_free(icon_latin1); + status = XStringListToTextProperty(&icon_locale, 1, &iconprop); + SDL_free(icon_locale); if (status) { XSetTextProperty(display, data->window, &iconprop, XA_WM_ICON_NAME);