summaryrefslogtreecommitdiffstats
path: root/contrib/libstdc++/config/io
diff options
context:
space:
mode:
authorkan <kan@FreeBSD.org>2005-06-03 03:29:38 +0000
committerkan <kan@FreeBSD.org>2005-06-03 03:29:38 +0000
commit3b6c93380e20c56b8151f9c6fc3916670b987df5 (patch)
treec4e455c4fe8d2a3ed1d621536386e3e252ad36bc /contrib/libstdc++/config/io
parent2156e40a831a8e0ab68e4bc091c2940bf46ca6df (diff)
downloadFreeBSD-src-3b6c93380e20c56b8151f9c6fc3916670b987df5.zip
FreeBSD-src-3b6c93380e20c56b8151f9c6fc3916670b987df5.tar.gz
Gcc 3.4.4 C++ support bits.
Diffstat (limited to 'contrib/libstdc++/config/io')
-rw-r--r--contrib/libstdc++/config/io/basic_file_stdio.cc32
-rw-r--r--contrib/libstdc++/config/io/c_io_stdio.h3
2 files changed, 26 insertions, 9 deletions
diff --git a/contrib/libstdc++/config/io/basic_file_stdio.cc b/contrib/libstdc++/config/io/basic_file_stdio.cc
index a3ed839..0a4e154 100644
--- a/contrib/libstdc++/config/io/basic_file_stdio.cc
+++ b/contrib/libstdc++/config/io/basic_file_stdio.cc
@@ -189,10 +189,17 @@ namespace std
__basic_file* __ret = NULL;
if (!this->is_open() && __file)
{
- _M_cfile = __file;
- _M_cfile_created = false;
- this->sync();
- __ret = this;
+ int __err;
+ errno = 0;
+ do
+ __err = this->sync();
+ while (__err && errno == EINTR);
+ if (!__err)
+ {
+ _M_cfile = __file;
+ _M_cfile_created = false;
+ __ret = this;
+ }
}
return __ret;
}
@@ -252,12 +259,21 @@ namespace std
__basic_file* __ret = static_cast<__basic_file*>(NULL);
if (this->is_open())
{
+ int __err = 0;
if (_M_cfile_created)
- fclose(_M_cfile);
- else
- this->sync();
+ {
+ // In general, no need to zero errno in advance if checking
+ // for error first. However, C89/C99 (at variance with IEEE
+ // 1003.1, f.i.) do not mandate that fclose must set errno
+ // upon error.
+ errno = 0;
+ do
+ __err = fclose(_M_cfile);
+ while (__err && errno == EINTR);
+ }
_M_cfile = 0;
- __ret = this;
+ if (!__err)
+ __ret = this;
}
return __ret;
}
diff --git a/contrib/libstdc++/config/io/c_io_stdio.h b/contrib/libstdc++/config/io/c_io_stdio.h
index c9ae432..5659c13 100644
--- a/contrib/libstdc++/config/io/c_io_stdio.h
+++ b/contrib/libstdc++/config/io/c_io_stdio.h
@@ -1,6 +1,6 @@
// underlying io library -*- C++ -*-
-// Copyright (C) 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+// Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
// software; you can redistribute it and/or modify it under the
@@ -43,6 +43,7 @@ namespace std
// for basic_file.h
typedef FILE __c_file;
+ // XXX GLIBCXX_ABI Deprecated
// for ios_base.h
struct __ios_flags
{
OpenPOWER on IntegriCloud