set stream orientations in open_[w]memstream
authorRich Felker <dalias@aerifal.cx>
Tue, 28 Aug 2018 23:22:13 +0000 (19:22 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 29 Aug 2018 00:01:25 +0000 (20:01 -0400)
commitb152d575fdde1b4173afb4cade55f35b6b2e9128
treecc94ef2a9e107e2bc4a741eb901462d2d5973b20
parentf66022dda8d18e6732626c7806f6c4d32023d574
set stream orientations in open_[w]memstream

fundamentally there is no good reason these functions need to set an
orientation (morally it should be possible to write a wchar_t[] memory
stream using byte functions, or a char[] memory stream using wide
functions), but it's a part of the specification that they do. aside
from being able to inspect the orientation with fwide, failure to set
the orientation in open_wmemstream is observable if the locale changes
between open_wmemstream and the first operation on the stream; this is
because the encoding rule (locale) for the stream is required to be
bound at the time the stream becomes wide-oriented.

for open_wmemstream, call fwide to avoid duplicating the logic for
binding the encoding rule. for open_memstream it suffices just to set
the mode field in the FILE struct.
src/stdio/open_memstream.c
src/stdio/open_wmemstream.c