aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/config
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2017-08-09 17:52:10 +0000
committerJonathan Wakely <jwakely@redhat.com>2017-08-09 17:52:10 +0000
commit1cb434b3434e208488215f67ce13adee7c9d416b (patch)
tree2f1a5e8476f916373aca9ab3ebd0606ceaf5f9c5 /libstdc++-v3/config
parent99982ff7879173570c29dd2baac8c191dc96a982 (diff)
PR libstdc++/81751 don't call fflush(NULL)
PR libstdc++/79820 PR libstdc++/81751 * config/io/basic_file_stdio.cc (sys_open(FILE*, ios_base::openmode)): Call fflush on the stream instead of calling sync() while _M_cfile is null. Restore original value of errno. * testsuite/ext/stdio_filebuf/char/79820.cc: New. * testsuite/ext/stdio_filebuf/char/81751.cc: New. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@250993 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/config')
-rw-r--r--libstdc++-v3/config/io/basic_file_stdio.cc6
1 files changed, 4 insertions, 2 deletions
diff --git a/libstdc++-v3/config/io/basic_file_stdio.cc b/libstdc++-v3/config/io/basic_file_stdio.cc
index e7367016504..eeb1e5e94b6 100644
--- a/libstdc++-v3/config/io/basic_file_stdio.cc
+++ b/libstdc++-v3/config/io/basic_file_stdio.cc
@@ -195,11 +195,13 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__basic_file* __ret = NULL;
if (!this->is_open() && __file)
{
- int __err;
+ int __err, __save_errno = errno;
+ // POSIX guarantees that fflush sets errno on error, but C doesn't.
errno = 0;
do
- __err = this->sync();
+ __err = fflush(__file);
while (__err && errno == EINTR);
+ errno = __save_errno;
if (!__err)
{
_M_cfile = __file;