From 14b47df4525a53d21c1d88d605f66ffe486e7e75 Mon Sep 17 00:00:00 2001 From: jaseg Date: Sat, 25 Oct 2014 16:31:26 +0200 Subject: Fixed --help, also added some randomness. --- fgetwc_fix.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 fgetwc_fix.c (limited to 'fgetwc_fix.c') diff --git a/fgetwc_fix.c b/fgetwc_fix.c new file mode 100644 index 0000000..ed770ce --- /dev/null +++ b/fgetwc_fix.c @@ -0,0 +1,33 @@ + +#include +#include +#include +#include +#include + +#include "fgetwc_fix.h" + +/* code blatantly ripped from newlib. If you are from newlib: newlib rocks, keep going! */ +wint_t _fgetwc_fixed(FILE *fp) { + wchar_t wc; + size_t res; + size_t nconv = 0; + char buf[MB_CUR_MAX]; + mbstate_t mbstate; + memset(&mbstate, 0, sizeof(mbstate)); + + while((buf[nconv++] = fgetc(fp)) != EOF){ + res = mbrtowc(&wc, buf, nconv, &mbstate); + if (res == (size_t)-1) /* invalid sequence */ + break; + else if (res == (size_t)-2) /* incomplete sequence */ + continue; + else if (res == 0) + return L'\0'; + else + return wc; + } + + errno = EILSEQ; + return WEOF; +} -- cgit