summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2007-03-28 21:50:51 +0000
committerBruno Haible <bruno@clisp.org>2007-03-28 21:50:51 +0000
commite213ad01832156fe83f3455195bfe3e1923637de (patch)
tree7081b2fe66389212382861814f7aca3866185f7e /lib
parentfbdb50df6fdb8a013db967d52c14131c5c6db234 (diff)
downloadgnulib-e213ad01832156fe83f3455195bfe3e1923637de.tar.gz
Distinguish invalid and incomplete UTF-8 input, and set errno accordingly.
Diffstat (limited to 'lib')
-rw-r--r--lib/striconveh.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/lib/striconveh.c b/lib/striconveh.c
index 8bee60ae8b..4da14722e6 100644
--- a/lib/striconveh.c
+++ b/lib/striconveh.c
@@ -479,16 +479,13 @@ mem_cd_iconveh_internal (const char *src, size_t srclen,
int n;
int m;
- n = u8_mbtouc (&uc, (const uint8_t *) in1ptr, in1size);
- if (uc == 0xfffd
- && !(n >= 3
- && (uint8_t)in1ptr[0] == 0xEF
- && (uint8_t)in1ptr[1] == 0xBF
- && (uint8_t)in1ptr[2] == 0xBD))
+ n = u8_mbtoucr (&uc, (const uint8_t *) in1ptr, in1size);
+ if (n < 0)
{
+ errno = (n == -2 ? EINVAL : EILSEQ);
+ n = u8_mbtouc (&uc, (const uint8_t *) in1ptr, in1size);
in1ptr += n;
in1size -= n;
- errno = EILSEQ;
res1 = (size_t)(-1);
incremented1 = true;
break;