diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2017-08-09 18:52:10 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2017-08-09 18:52:10 +0100 |
commit | 04d07b61cb80fd97e98eb39451ff6a8675a63d90 (patch) | |
tree | 2f1a5e8476f916373aca9ab3ebd0606ceaf5f9c5 /libstdc++-v3/config | |
parent | a171ac0380a22f992d9c57a4189ddfc834d0e022 (diff) | |
download | gcc-04d07b61cb80fd97e98eb39451ff6a8675a63d90.zip gcc-04d07b61cb80fd97e98eb39451ff6a8675a63d90.tar.gz gcc-04d07b61cb80fd97e98eb39451ff6a8675a63d90.tar.bz2 |
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.
From-SVN: r250993
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 e736701..eeb1e5e 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; |