Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
Fixed bug #455
Browse files Browse the repository at this point in the history
If passed "" for the character set, let iconv_open() interpret it as
locale.

This was merged from revision 3234,3235 from SDL 1.2
  • Loading branch information
slouken committed Jul 12, 2007
1 parent 5f2826a commit ead8961
Showing 1 changed file with 37 additions and 8 deletions.
45 changes: 37 additions & 8 deletions src/stdlib/SDL_iconv.c
Expand Up @@ -111,10 +111,8 @@ static struct
int format;
} encodings[] = {
/* *INDENT-OFF* */
{ "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 },
Expand All @@ -138,13 +136,40 @@ static struct
/* *INDENT-ON* */
};

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;
Expand Down Expand Up @@ -805,13 +830,17 @@ SDL_iconv_string(const char *tocode, const char *fromcode, const char *inbuf,
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) {
/* See if we can recover here (fixes iconv on Solaris 11) */
if (!tocode || !*tocode) {
tocode = "UTF-8";
}
if (!fromcode || !*fromcode) {
tocode = "UTF-8";
}
cd = SDL_iconv_open(tocode, fromcode);
}
if (cd == (SDL_iconv_t) - 1) {
return NULL;
}
Expand Down

0 comments on commit ead8961

Please sign in to comment.