diff options
author | Jakob Kaivo <jkk@ung.org> | 2019-02-08 18:42:39 -0500 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2019-02-08 18:42:39 -0500 |
commit | 7ef8a7379f7f7d09e71ccae2a0b688c3cd80423f (patch) | |
tree | 092ab0aed1769117fd7b28b8592f6f96b0e0d5af /src/wchar/fgetwc.c | |
parent | 6acf19370e8adff79cd83b257d3f04aeaf2a59dd (diff) |
merge sources into single tree
Diffstat (limited to 'src/wchar/fgetwc.c')
-rw-r--r-- | src/wchar/fgetwc.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/wchar/fgetwc.c b/src/wchar/fgetwc.c new file mode 100644 index 00000000..30d98083 --- /dev/null +++ b/src/wchar/fgetwc.c @@ -0,0 +1,35 @@ +#include <wchar.h> +#include "stdio.h" +#include "nonstd/io.h" +#include "limits.h" + +wint_t fgetwc(FILE * stream) +{ + if (fwide(stream, 1) <= 0) { + + return WEOF; + } + + flockfile(stream); + stream->orientation = -1; + + char mbr[MB_LEN_MAX+1] = {0}; + int n = 0; + mbstate_t ps = 0; + wint_t wc = 0; + + /* FIXME: check for (size_t)-2 and (size_t)-1 from mbrtowc */ + do { + mbr[n++] = getc_unlocked(stream); + ps = 0; + } while (mbrtowc(&wc, mbr, n, &ps) != 0); + + stream->orientation = 1; + funlockfile(stream); + + return wc; +} + +/* +STDC(199409) +*/ |