summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/iconv.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/iconv.c b/src/iconv.c
index 45bd15f..db47cbc 100644
--- a/src/iconv.c
+++ b/src/iconv.c
@@ -356,12 +356,19 @@ size_t iconv(iconv_t cd, char **inbuf, size_t *inbytesleft, char **outbuf,
/* Clear current write state */
e->write_state = WRITE_NONE;
- if (e->in)
+ if (e->in) {
read = encoding_read(e->in, character_callback, *inbuf,
*inbytesleft, e);
- else
+
+ /* A trailing complete nullable sequence should
+ * result in success */
+ if (e->write_state == WRITE_NONE &&
+ !encoding_read_in_multibyte_sequence(e->in))
+ e->write_state = WRITE_SUCCESS;
+ } else {
read = iconv_eightbit_read(e, character_callback,
*inbuf, *inbytesleft, e);
+ }
/* Stop on error */
if (e->write_state != WRITE_SUCCESS)