aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Crispin <john@openwrt.org>2014-10-27 15:51:25 +0000
committerJohn Crispin <john@openwrt.org>2014-10-27 15:51:25 +0000
commit6dc6e4ed08253d7c023cac7b2e7f6ffd127529f7 (patch)
treeafdf99dd9cbbc8091ce90009c7ed3c22fcb6bf72
parent5a6433cc6ce6cc833cf6f27463d0b85e4d7587a5 (diff)
downloadupstream-6dc6e4ed08253d7c023cac7b2e7f6ffd127529f7.tar.gz
upstream-6dc6e4ed08253d7c023cac7b2e7f6ffd127529f7.tar.bz2
upstream-6dc6e4ed08253d7c023cac7b2e7f6ffd127529f7.zip
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
-rw-r--r--package/libs/libiconv/src/iconv.c8
1 files changed, 4 insertions, 4 deletions
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;