From: John Crispin <john@openwrt.org>
Date: Mon, 27 Oct 2014 15:51:25 +0000 (+0000)
Subject: libiconv: do not replace untranslatable characters with * or ?
X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=6dc6e4ed08253d7c023cac7b2e7f6ffd127529f7;p=openwrt%2Fstaging%2Fansuel.git

libiconv: do not replace untranslatable characters with * or ?

Instead throw an -EILSEQ error.

Signed-off-by: Tjalling Hattink <t.hattink@fugro.nl>

SVN-Revision: 43089
---

diff --git a/package/libs/libiconv/src/iconv.c b/package/libs/libiconv/src/iconv.c
index cb4e947758..d2e19e3c45 100644
--- a/package/libs/libiconv/src/iconv.c
+++ b/package/libs/libiconv/src/iconv.c
@@ -244,7 +244,7 @@ static inline int utf8dec_wchar(wchar_t *c, unsigned char *in, size_t inb)
 	return -1;
 }
 
-static inline char latin9_translit(wchar_t c)
+static inline wchar_t latin9_translit(wchar_t c)
 {
 	/* a number of trivial iso-8859-15 <> utf-8 transliterations */
 	switch (c) {
@@ -256,7 +256,7 @@ static inline char latin9_translit(wchar_t c)
 	case 0x0152: return 0xBC; /* OE */
 	case 0x0153: return 0xBD; /* oe */
 	case 0x0178: return 0xBE; /* Y diaeresis */
-	default:     return '?';
+	default:     return 0xFFFD; /* cannot translate */
 	}
 }
 
@@ -394,9 +394,9 @@ charok:
 				c = latin9_translit(c);
 			/* fall through */
 		case LATIN_1:
+			if (c > 0xff) goto ilseq;
 			if (!*outb) goto toobig;
-			if (c < 0x100) **out = c;
-			else x++, **out = '*'; //FIXME: translit?
+			**out = c;
 			++*out;
 			--*outb;
 			break;