changeset 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 b004c6c24a98
children 64bf737873a2
files src/stdlib/SDL_iconv.c
diffstat 1 files changed, 26 insertions(+), 28 deletions(-) [+]
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;