diff options
Diffstat (limited to 'src/multibyte/wcrtomb.c')
-rw-r--r-- | src/multibyte/wcrtomb.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/multibyte/wcrtomb.c b/src/multibyte/wcrtomb.c index 59f733db..ddc37a57 100644 --- a/src/multibyte/wcrtomb.c +++ b/src/multibyte/wcrtomb.c @@ -4,8 +4,10 @@ * unnecessary. */ +#include <stdlib.h> #include <wchar.h> #include <errno.h> +#include "internal.h" size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict st) { @@ -13,6 +15,13 @@ size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict st) if ((unsigned)wc < 0x80) { *s = wc; return 1; + } else if (MB_CUR_MAX == 1) { + if (!IS_CODEUNIT(wc)) { + errno = EILSEQ; + return -1; + } + *s = wc; + return 1; } else if ((unsigned)wc < 0x800) { *s++ = 0xc0 | (wc>>6); *s = 0x80 | (wc&0x3f); |