提交 b152d575 编写于 作者: R Rich Felker

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.
上级 f66022dd
......@@ -89,6 +89,7 @@ FILE *open_memstream(char **bufp, size_t *sizep)
f->f.write = ms_write;
f->f.seek = ms_seek;
f->f.close = ms_close;
f->f.mode = -1;
if (!libc.threaded) f->f.lock = -1;
......
......@@ -94,5 +94,7 @@ FILE *open_wmemstream(wchar_t **bufp, size_t *sizep)
if (!libc.threaded) f->f.lock = -1;
fwide(&f->f, 1);
return __ofl_add(&f->f);
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册