X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmultibyte%2Fwcsrtombs.c;h=30be415d0683f287bf575a5b33e8c493f9b42434;hb=b98414732d230c236b9a79c709c2b035ca67be12;hp=d48a65e74aaccdb151437bcbfd64b0aac1136a1a;hpb=40b2b5fa94d3ae27293f4d572bdcf1c3a5ef590f;p=musl diff --git a/src/multibyte/wcsrtombs.c b/src/multibyte/wcsrtombs.c index d48a65e7..30be415d 100644 --- a/src/multibyte/wcsrtombs.c +++ b/src/multibyte/wcsrtombs.c @@ -4,12 +4,7 @@ * unnecessary. */ -#include -#include #include -#include - -#include "internal.h" size_t wcsrtombs(char *restrict s, const wchar_t **restrict ws, size_t n, mbstate_t *restrict st) { @@ -26,8 +21,13 @@ size_t wcsrtombs(char *restrict s, const wchar_t **restrict ws, size_t n, mbstat } return n; } - while (n>=4 && **ws) { - if (**ws >= 0x80u) { + 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; @@ -38,8 +38,13 @@ size_t wcsrtombs(char *restrict s, const wchar_t **restrict ws, size_t n, mbstat } (*ws)++; } - while (n && **ws) { - if (**ws >= 0x80u) { + 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; @@ -52,7 +57,5 @@ size_t wcsrtombs(char *restrict s, const wchar_t **restrict ws, size_t n, mbstat } (*ws)++; } - if (n) *s = 0; - *ws = 0; - return N-n; + return N; }