OLD | NEW |
1 #include "stdio_impl.h" | 1 #include "stdio_impl.h" |
2 #include "locale_impl.h" | 2 #include "locale_impl.h" |
3 #include <wchar.h> | 3 #include <wchar.h> |
4 | 4 |
5 int fputws(const wchar_t *restrict ws, FILE *restrict f) | 5 int fputws(const wchar_t* restrict ws, FILE* restrict f) { |
6 { | 6 unsigned char buf[BUFSIZ]; |
7 » unsigned char buf[BUFSIZ]; | 7 size_t l = 0; |
8 » size_t l=0; | 8 locale_t *ploc = &CURRENT_LOCALE, loc = *ploc; |
9 » locale_t *ploc = &CURRENT_LOCALE, loc = *ploc; | |
10 | 9 |
11 » FLOCK(f); | 10 FLOCK(f); |
12 | 11 |
13 » fwide(f, 1); | 12 fwide(f, 1); |
14 » *ploc = f->locale; | 13 *ploc = f->locale; |
15 | 14 |
16 » while (ws && (l = wcsrtombs((void *)buf, (void*)&ws, sizeof buf, 0))+1 >
1) | 15 while (ws && (l = wcsrtombs((void*)buf, (void*)&ws, sizeof buf, 0)) + 1 > 1) |
17 » » if (__fwritex(buf, l, f) < l) { | 16 if (__fwritex(buf, l, f) < l) { |
18 » » » FUNLOCK(f); | 17 FUNLOCK(f); |
19 » » » *ploc = loc; | 18 *ploc = loc; |
20 » » » return -1; | 19 return -1; |
21 » » } | 20 } |
22 | 21 |
23 » FUNLOCK(f); | 22 FUNLOCK(f); |
24 | 23 |
25 » *ploc = loc; | 24 *ploc = loc; |
26 » return l; /* 0 or -1 */ | 25 return l; /* 0 or -1 */ |
27 } | 26 } |
28 | 27 |
29 weak_alias(fputws, fputws_unlocked); | 28 weak_alias(fputws, fputws_unlocked); |
OLD | NEW |