summaryrefslogtreecommitdiff
path: root/libstdc++-v3/config/io/basic_file_stdio.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libstdc++-v3/config/io/basic_file_stdio.cc')
-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;