diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2017-08-09 17:52:10 +0000 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2017-08-09 17:52:10 +0000 |
commit | 1cb434b3434e208488215f67ce13adee7c9d416b (patch) | |
tree | 2f1a5e8476f916373aca9ab3ebd0606ceaf5f9c5 /libstdc++-v3/config | |
parent | 99982ff7879173570c29dd2baac8c191dc96a982 (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.cc | 6 |
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; |