diff options
Diffstat (limited to 'wcsmbs/mbrtowc.c')
-rw-r--r-- | wcsmbs/mbrtowc.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/wcsmbs/mbrtowc.c b/wcsmbs/mbrtowc.c index 99bc5a4797..5a52b1dde1 100644 --- a/wcsmbs/mbrtowc.c +++ b/wcsmbs/mbrtowc.c @@ -28,7 +28,6 @@ # define EILSEQ EINVAL #endif - /* This is the private state used if PS is NULL. */ static mbstate_t state; @@ -69,12 +68,15 @@ __mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) characters. The output buffer must be large enough, otherwise the definition of MB_CUR_MAX is not correct. All the other possible errors also must not happen. */ - assert (status == GCONV_OK || status == GCONV_ILLEGAL_INPUT - || status == GCONV_INCOMPLETE_INPUT); + assert (status == GCONV_OK || status == GCONV_EMPTY_INPUT + || status == GCONV_ILLEGAL_INPUT + || status == GCONV_INCOMPLETE_INPUT + || status == GCONV_FULL_OUTPUT); - if (status == GCONV_OK) + if (status == GCONV_OK || status == GCONV_EMPTY_INPUT + || status == GCONV_FULL_OUTPUT) { - if (*(wchar_t *)data.outbuf == L'\0') + if (data.outbufavail > 0 && *(wchar_t *)data.outbuf == L'\0') { /* The converted character is the NUL character. */ assert (mbsinit (data.statep)); |