1#include "stdio_impl.h"
2#include <wchar.h>
3
4wint_t __fgetwc_unlocked(FILE*);
5
6wchar_t* fgetws(wchar_t* restrict s, int n, FILE* restrict f) {
7    wchar_t* p = s;
8
9    if (!n--)
10        return s;
11
12    FLOCK(f);
13
14    for (; n; n--) {
15        wint_t c = __fgetwc_unlocked(f);
16        if (c == WEOF)
17            break;
18        *p++ = c;
19        if (c == '\n')
20            break;
21    }
22    *p = 0;
23    if (ferror(f))
24        p = s;
25
26    FUNLOCK(f);
27
28    return (p == s) ? NULL : s;
29}
30
31weak_alias(fgetws, fgetws_unlocked);
32