glibc/wcsmbs
Zack Weinberg 2cc7bad0ae [BZ 1190] Make EOF sticky in stdio.
C99 specifies that the EOF condition on a file is "sticky": once EOF
has been encountered, all subsequent reads should continue to return
EOF until the file is closed or something clears the "end-of-file
indicator" (e.g. fseek, clearerr).  This is arguably a change from
C89, where the wording was ambiguous; the BSDs always had sticky EOF,
but the System V lineage would attempt to read from the underlying fd
again.  GNU libc has followed System V for as long as we've been
using libio, but nowadays C99 conformance and BSD compatibility are
more important than System V compatibility.

You might wonder if changing the _underflow impls is sufficient to
apply the C99 semantics to all of the many stdio functions that
perform input.  It should be enough to cover all paths to _IO_SYSREAD,
and the only other functions that call _IO_SYSREAD are the _seekoff
impls, which is OK because seeking clears EOF, and the _xsgetn impls,
which, as far as I can tell, are unused within glibc.

The test programs in this patch use a pseudoterminal to set up the
necessary conditions.  To facilitate this I added a new test-support
function that sets up a pair of pty file descriptors for you; it's
almost the same as BSD openpty, the only differences are that it
allocates the optionally-returned tty pathname with malloc, and that
it crashes if anything goes wrong.

	[BZ #1190]
        [BZ #19476]
	* libio/fileops.c (_IO_new_file_underflow): Return EOF immediately
	if the _IO_EOF_SEEN bit is already set; update commentary.
	* libio/oldfileops.c (_IO_old_file_underflow): Likewise.
	* libio/wfileops.c (_IO_wfile_underflow): Likewise.

	* support/support_openpty.c, support/tty.h: New files.
	* support/Makefile (libsupport-routines): Add support_openpty.

	* libio/tst-fgetc-after-eof.c, wcsmbs/test-fgetwc-after-eof.c:
	New test cases.
	* libio/Makefile (tests): Add tst-fgetc-after-eof.
	* wcsmbs/Makefile (tests): Add tst-fgetwc-after-eof.
2018-03-13 08:31:56 -04:00
..
bits Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
btowc.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
c16rtomb.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
Depend
isoc99_fwscanf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
isoc99_swscanf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
isoc99_vfwscanf.c Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
isoc99_vswscanf.c Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
isoc99_vwscanf.c Mechanically remove _IO_ name aliases for types and constants. 2018-02-21 14:11:05 -05:00
isoc99_wscanf.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
Makefile [BZ 1190] Make EOF sticky in stdio. 2018-03-13 08:31:56 -04:00
mbrlen.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
mbrtoc16.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
mbrtowc.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
mbsinit.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
mbsnrtowcs.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
mbsrtowcs_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
mbsrtowcs.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-char-types.c Define char16_t, char32_t consistently with uint_least16_t, uint_least32_t (bug 17979). 2018-02-07 20:33:55 +00:00
test-wcpcpy.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-wcpncpy.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-wcscat.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-wcschr.c
test-wcschrnul.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-wcscmp.c
test-wcscpy.c
test-wcscspn.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-wcslen.c
test-wcsncat.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-wcsncmp.c
test-wcsncpy.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-wcsnlen.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-wcspbrk.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-wcsrchr.c
test-wcsspn.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-wmemchr.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
test-wmemcmp.c
test-wmemset.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-btowc.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-c16c32-1.c
tst-fgetwc-after-eof.c [BZ 1190] Make EOF sticky in stdio. 2018-03-13 08:31:56 -04:00
tst-mbrtowc2.c Prefer https for Sourceware links 2017-11-16 11:49:26 +05:30
tst-mbrtowc.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-mbsrtowcs.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-wchar-h.c
tst-wcpncpy.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-wcrtomb.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-wcsnlen.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-wcstod-nan-locale.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-wcstod-round.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
tst-wcstof.c
tst-wcstol-locale.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
uchar.h Define char16_t, char32_t consistently with uint_least16_t, uint_least32_t (bug 17979). 2018-02-07 20:33:55 +00:00
Versions Add _Float32 function aliases. 2017-12-07 00:48:31 +00:00
wchar.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcpcpy.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcpncpy.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcrtomb.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsatcliff.c
wcscasecmp_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcscasecmp.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcscat.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcschr.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcschrnul.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcscmp.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcscoll_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcscoll.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcscpy.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcscspn.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsdup.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcslen.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsmbs-tst1.c
wcsmbsload.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsmbsload.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsncase_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsncase.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsncat.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsncmp.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsncpy.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsnlen.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsnrtombs.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcspbrk.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsrchr.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsrtombs.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsspn.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsstr.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstod_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstod_nan.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstod.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstof_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstof_nan.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstof.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstok.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstol_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstol.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstold_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstold_nan.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstold.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstoll_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstoll.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstoul_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstoul.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstoull_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcstoull.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcswidth.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsxfrm_l.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcsxfrm.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wctob.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcwidth.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wcwidth.h Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wmemchr.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wmemcmp.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wmemcpy.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wmemmove.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wmempcpy.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00
wmemset.c Update copyright dates with scripts/update-copyrights. 2018-01-01 00:32:25 +00:00