aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/config
diff options
context:
space:
mode:
authorJonathan Wakely <jwakely@redhat.com>2017-08-09 18:52:10 +0100
committerJonathan Wakely <redi@gcc.gnu.org>2017-08-09 18:52:10 +0100
commit04d07b61cb80fd97e98eb39451ff6a8675a63d90 (patch)
tree2f1a5e8476f916373aca9ab3ebd0606ceaf5f9c5 /libstdc++-v3/config
parenta171ac0380a22f992d9c57a4189ddfc834d0e022 (diff)
downloadgcc-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.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 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;