Index: fusl/src/multibyte/wcsrtombs.c |
diff --git a/fusl/src/multibyte/wcsrtombs.c b/fusl/src/multibyte/wcsrtombs.c |
index 30be415d0683f287bf575a5b33e8c493f9b42434..97cd4f47b7d0cba16126d9069d30dbd57a1a873f 100644 |
--- a/fusl/src/multibyte/wcsrtombs.c |
+++ b/fusl/src/multibyte/wcsrtombs.c |
@@ -1,4 +1,4 @@ |
-/* |
+/* |
* 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. |
@@ -6,56 +6,63 @@ |
#include <wchar.h> |
-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++) { |
- if (*ws2 >= 0x80u) { |
- l = wcrtomb(buf, *ws2, 0); |
- if (!(l+1)) return -1; |
- n += l; |
- } else n++; |
- } |
- return n; |
- } |
- 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; |
- n -= l; |
- } else { |
- *s++ = **ws; |
- n--; |
- } |
- (*ws)++; |
- } |
- 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; |
- wcrtomb(s, **ws, 0); |
- s += l; |
- n -= l; |
- } else { |
- *s++ = **ws; |
- n--; |
- } |
- (*ws)++; |
- } |
- return N; |
+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++) { |
+ if (*ws2 >= 0x80u) { |
+ l = wcrtomb(buf, *ws2, 0); |
+ if (!(l + 1)) |
+ return -1; |
+ n += l; |
+ } else |
+ n++; |
+ } |
+ return n; |
+ } |
+ 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; |
+ n -= l; |
+ } else { |
+ *s++ = **ws; |
+ n--; |
+ } |
+ (*ws)++; |
+ } |
+ 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; |
+ wcrtomb(s, **ws, 0); |
+ s += l; |
+ n -= l; |
+ } else { |
+ *s++ = **ws; |
+ n--; |
+ } |
+ (*ws)++; |
+ } |
+ return N; |
} |