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/fgetws.c | |
parent | 6acf19370e8adff79cd83b257d3f04aeaf2a59dd (diff) |
merge sources into single tree
Diffstat (limited to 'src/wchar/fgetws.c')
-rw-r--r-- | src/wchar/fgetws.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/wchar/fgetws.c b/src/wchar/fgetws.c new file mode 100644 index 00000000..5262a79d --- /dev/null +++ b/src/wchar/fgetws.c @@ -0,0 +1,37 @@ +#include <wchar.h> +#include "stdio.h" +#include "nonstd/assert.h" + +wchar_t * fgetws(wchar_t * restrict s, int n, FILE * restrict stream) +{ + ASSERT_NONNULL(s); + ASSERT_NONNULL(stream); + + if (fwide(stream, 1) <= 0) { + /* not a wide stream */ + return NULL; + } + + int i; + for (i = 0; i < n; i++) { + s[i] = fgetwc(stream); + if (s[i] == WEOF) { + if (feof(stream)) { + s[i] = L'\0'; + return s; + } + /* read or encoding error */ + return NULL; + } + if (s[i] == L'\0') { + break; + } + } + s[i] = L'\0'; + + return s; +} + +/* +STDC(199409) +*/ |