Commit 1066adb5 authored by Sam Lantinga's avatar Sam Lantinga

Fix for bug #447 merged from SDL 1.2

--HG--
extra : convert_revision : svn%3Ac70aab31-4412-0410-b14c-859654838e24/trunk%402408
parent 5d257779
...@@ -656,8 +656,7 @@ extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode, ...@@ -656,8 +656,7 @@ extern DECLSPEC char *SDLCALL SDL_iconv_string(const char *tocode,
const char *fromcode, const char *fromcode,
const char *inbuf, const char *inbuf,
size_t inbytesleft); size_t inbytesleft);
#define SDL_iconv_utf8_ascii(S) SDL_iconv_string("646", "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_latin1(S) SDL_iconv_string("8859-1", "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_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) #define SDL_iconv_utf8_ucs4(S) (Uint32 *)SDL_iconv_string("UCS-4", "UTF-8", S, SDL_strlen(S)+1)
......
...@@ -773,6 +773,27 @@ SDL_iconv_close(SDL_iconv_t cd) ...@@ -773,6 +773,27 @@ SDL_iconv_close(SDL_iconv_t cd)
#endif /* !HAVE_ICONV */ #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 * char *
SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf,
size_t inbytesleft) size_t inbytesleft)
...@@ -784,6 +805,12 @@ SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf, ...@@ -784,6 +805,12 @@ SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf,
size_t outbytesleft; size_t outbytesleft;
size_t retCode = 0; size_t retCode = 0;
if (!fromcode || !*fromcode) {
fromcode = getlocale();
}
if (!tocode || !*tocode) {
tocode = getlocale();
}
cd = SDL_iconv_open(tocode, fromcode); cd = SDL_iconv_open(tocode, fromcode);
if (cd == (SDL_iconv_t) - 1) { if (cd == (SDL_iconv_t) - 1) {
return NULL; return NULL;
......
...@@ -429,13 +429,13 @@ X11_SetWindowTitle(_THIS, SDL_Window * window) ...@@ -429,13 +429,13 @@ X11_SetWindowTitle(_THIS, SDL_Window * window)
#endif #endif
if (title != NULL) { if (title != NULL) {
char *title_latin1 = SDL_iconv_utf8_latin1((char *) title); char *title_locale = SDL_iconv_utf8_locale(title);
if (!title_latin1) { if (!title_locale) {
SDL_OutOfMemory(); SDL_OutOfMemory();
return; return;
} }
status = XStringListToTextProperty(&title_latin1, 1, &titleprop); status = XStringListToTextProperty(&title_locale, 1, &titleprop);
SDL_free(title_latin1); SDL_free(title_locale);
if (status) { if (status) {
XSetTextProperty(display, data->window, &titleprop, XA_WM_NAME); XSetTextProperty(display, data->window, &titleprop, XA_WM_NAME);
XFree(titleprop.value); XFree(titleprop.value);
...@@ -454,13 +454,13 @@ X11_SetWindowTitle(_THIS, SDL_Window * window) ...@@ -454,13 +454,13 @@ X11_SetWindowTitle(_THIS, SDL_Window * window)
#endif #endif
} }
if (icon != NULL) { if (icon != NULL) {
char *icon_latin1 = SDL_iconv_utf8_latin1((char *) icon); char *icon_locale = SDL_iconv_utf8_locale(icon);
if (!icon_latin1) { if (!icon_locale) {
SDL_OutOfMemory(); SDL_OutOfMemory();
return; return;
} }
status = XStringListToTextProperty(&icon_latin1, 1, &iconprop); status = XStringListToTextProperty(&icon_locale, 1, &iconprop);
SDL_free(icon_latin1); SDL_free(icon_locale);
if (status) { if (status) {
XSetTextProperty(display, data->window, &iconprop, XSetTextProperty(display, data->window, &iconprop,
XA_WM_ICON_NAME); XA_WM_ICON_NAME);
......
...@@ -61,10 +61,10 @@ main(int argc, char *argv[]) ...@@ -61,10 +61,10 @@ main(int argc, char *argv[])
fprintf(stderr, "FAIL: %s\n", formats[i]); fprintf(stderr, "FAIL: %s\n", formats[i]);
++errors; ++errors;
} }
if(test[0]) { if (test[0]) {
SDL_free(test[0]); SDL_free(test[0]);
} }
if(test[1]) { if (test[1]) {
SDL_free(test[1]); SDL_free(test[1]);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment