this is a requirement in POSIX that's omitted, and seemed potentially
non-conforming, in the C standard. as such it was omitted here.
however, as part of Austin Group issue #1170, the discrepancy was
raised with WG14 and determined to be unintended; future versions of
the C standard will require the error indicator to be set, as POSIX
does.
do {
b = c = getc_unlocked(f);
if (c < 0) {
- if (!first) errno = EILSEQ;
+ if (!first) {
+ f->flags |= F_ERR;
+ errno = EILSEQ;
+ }
return WEOF;
}
l = mbrtowc(&wc, (void *)&b, 1, &st);
if (l == -1) {
- if (!first) ungetc(b, f);
+ if (!first) {
+ f->flags |= F_ERR;
+ ungetc(b, f);
+ }
return WEOF;
}
first = 0;