Mercurial > sdl-ios-xcode
changeset 3998:098ac044cd2f SDL-1.2
Fixed bug #447
Xlib uses the native locale, not latin1
... the question is... what does the server use? :)
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 04 Jul 2007 07:54:06 +0000 |
parents | 6a4f3a32c2e6 |
children | f61a20d195f7 |
files | include/SDL_stdinc.h src/stdlib/SDL_iconv.c src/video/x11/SDL_x11wm.c |
diffstat | 3 files changed, 35 insertions(+), 10 deletions(-) [+] |
line wrap: on
line diff
--- a/include/SDL_stdinc.h Wed Jul 04 04:27:47 2007 +0000 +++ b/include/SDL_stdinc.h Wed Jul 04 07:54:06 2007 +0000 @@ -584,8 +584,7 @@ string that must be freed with SDL_free() or NULL on error. */ extern DECLSPEC char * SDLCALL SDL_iconv_string(const char *tocode, 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 04:27:47 2007 +0000 +++ b/src/stdlib/SDL_iconv.c Wed Jul 04 07:54:06 2007 +0000 @@ -772,6 +772,26 @@ #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; @@ -781,6 +801,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_x11wm.c Wed Jul 04 04:27:47 2007 +0000 +++ b/src/video/x11/SDL_x11wm.c Wed Jul 04 07:54:06 2007 +0000 @@ -257,13 +257,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(SDL_Display, WMwindow, &titleprop, XA_WM_NAME); XFree(titleprop.value); @@ -280,13 +280,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(SDL_Display, WMwindow, &iconprop, XA_WM_ICON_NAME); XFree(iconprop.value);