projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix arm __a_barrier_oldkuser when built as thumb
[musl]
/
src
/
multibyte
/
mbsnrtowcs.c
diff --git
a/src/multibyte/mbsnrtowcs.c
b/src/multibyte/mbsnrtowcs.c
index
cae4caa
..
931192e
100644
(file)
--- a/
src/multibyte/mbsnrtowcs.c
+++ b/
src/multibyte/mbsnrtowcs.c
@@
-5,6
+5,7
@@
size_t mbsnrtowcs(wchar_t *restrict wcs, const char **restrict src, size_t n, si
size_t l, cnt=0, n2;
wchar_t *ws, wbuf[256];
const char *s = *src;
size_t l, cnt=0, n2;
wchar_t *ws, wbuf[256];
const char *s = *src;
+ const char *tmp_s;
if (!wcs) ws = wbuf, wn = sizeof wbuf / sizeof *wbuf;
else ws = wcs;
if (!wcs) ws = wbuf, wn = sizeof wbuf / sizeof *wbuf;
else ws = wcs;
@@
-15,7
+16,7
@@
size_t mbsnrtowcs(wchar_t *restrict wcs, const char **restrict src, size_t n, si
while ( s && wn && ( (n2=n/4)>=wn || n2>32 ) ) {
if (n2>=wn) n2=wn;
while ( s && wn && ( (n2=n/4)>=wn || n2>32 ) ) {
if (n2>=wn) n2=wn;
-
n -= n2
;
+
tmp_s = s
;
l = mbsrtowcs(ws, &s, n2, st);
if (!(l+1)) {
cnt = l;
l = mbsrtowcs(ws, &s, n2, st);
if (!(l+1)) {
cnt = l;
@@
-26,6
+27,7
@@
size_t mbsnrtowcs(wchar_t *restrict wcs, const char **restrict src, size_t n, si
ws += l;
wn -= l;
}
ws += l;
wn -= l;
}
+ n = s ? n - (s - tmp_s) : 0;
cnt += l;
}
if (s) while (wn && n) {
cnt += l;
}
if (s) while (wn && n) {