projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix erroneous pthread_cond_wait mutex waiter count logic due to typo
[musl]
/
src
/
multibyte
/
wcsrtombs.c
diff --git
a/src/multibyte/wcsrtombs.c
b/src/multibyte/wcsrtombs.c
index
3c48d65
..
b5713ae
100644
(file)
--- a/
src/multibyte/wcsrtombs.c
+++ b/
src/multibyte/wcsrtombs.c
@@
-1,24
+1,13
@@
-/*
- * 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 <inttypes.h>
#include <wchar.h>
#include <wchar.h>
-#include <errno.h>
-
-#include "internal.h"
-size_t wcsrtombs(char *
s, const wchar_t **ws, size_t n, mbstate_t *
st)
+size_t wcsrtombs(char *
restrict s, const wchar_t **restrict ws, size_t n, mbstate_t *restrict
st)
{
const wchar_t *ws2;
char buf[4];
size_t N = n, l;
if (!s) {
for (n=0, ws2=*ws; *ws2; ws2++) {
{
const wchar_t *ws2;
char buf[4];
size_t N = n, l;
if (!s) {
for (n=0, ws2=*ws; *ws2; ws2++) {
- if (*ws2 >= 0x80) {
+ if (*ws2 >= 0x80
u
) {
l = wcrtomb(buf, *ws2, 0);
if (!(l+1)) return -1;
n += l;
l = wcrtomb(buf, *ws2, 0);
if (!(l+1)) return -1;
n += l;
@@
-26,8
+15,13
@@
size_t wcsrtombs(char *s, const wchar_t **ws, size_t n, mbstate_t *st)
}
return n;
}
}
return n;
}
- while (n>=4 && **ws) {
- if (**ws >= 0x80) {
+ while (n>=4) {
+ if (**ws-1u >= 0x7fu) {
+ if (!**ws) {
+ *s = 0;
+ *ws = 0;
+ return N-n;
+ }
l = wcrtomb(s, **ws, 0);
if (!(l+1)) return -1;
s += l;
l = wcrtomb(s, **ws, 0);
if (!(l+1)) return -1;
s += l;
@@
-38,8
+32,13
@@
size_t wcsrtombs(char *s, const wchar_t **ws, size_t n, mbstate_t *st)
}
(*ws)++;
}
}
(*ws)++;
}
- while (n && **ws) {
- if (**ws >= 0x80) {
+ while (n) {
+ if (**ws-1u >= 0x7fu) {
+ if (!**ws) {
+ *s = 0;
+ *ws = 0;
+ return N-n;
+ }
l = wcrtomb(buf, **ws, 0);
if (!(l+1)) return -1;
if (l>n) return N-n;
l = wcrtomb(buf, **ws, 0);
if (!(l+1)) return -1;
if (l>n) return N-n;
@@
-52,7
+51,5
@@
size_t wcsrtombs(char *s, const wchar_t **ws, size_t n, mbstate_t *st)
}
(*ws)++;
}
}
(*ws)++;
}
- if (n) *s = 0;
- *ws = 0;
- return N-n;
+ return N;
}
}