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
This commit is contained in:
John Crispin 2014-10-27 15:51:25 +00:00
parent 5a6433cc6c
commit 6dc6e4ed08

View file

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