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:
parent
5a6433cc6c
commit
6dc6e4ed08
1 changed files with 4 additions and 4 deletions
|
@ -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;
|
||||||
|
|
Loading…
Reference in a new issue