projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix swprintf handling of nul character in output
[musl]
/
src
/
multibyte
/
wcrtomb.c
diff --git
a/src/multibyte/wcrtomb.c
b/src/multibyte/wcrtomb.c
index
250649f
..
8e34926
100644
(file)
--- a/
src/multibyte/wcrtomb.c
+++ b/
src/multibyte/wcrtomb.c
@@
-1,14
+1,6
@@
-/*
- * This code was written by Rich Felker in 2010; no copyright is claimed.
- * This code is in the public domain. Attribution is appreciated but
- * unnecessary.
- */
-
#include <stdlib.h>
#include <stdlib.h>
-#include <inttypes.h>
#include <wchar.h>
#include <errno.h>
#include <wchar.h>
#include <errno.h>
-
#include "internal.h"
size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict st)
#include "internal.h"
size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict st)
@@
-17,6
+9,13
@@
size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict st)
if ((unsigned)wc < 0x80) {
*s = wc;
return 1;
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);
} else if ((unsigned)wc < 0x800) {
*s++ = 0xc0 | (wc>>6);
*s = 0x80 | (wc&0x3f);