diff options
author | kan <kan@FreeBSD.org> | 2005-06-03 03:29:38 +0000 |
---|---|---|
committer | kan <kan@FreeBSD.org> | 2005-06-03 03:29:38 +0000 |
commit | 3b6c93380e20c56b8151f9c6fc3916670b987df5 (patch) | |
tree | c4e455c4fe8d2a3ed1d621536386e3e252ad36bc /contrib/libstdc++/config/io | |
parent | 2156e40a831a8e0ab68e4bc091c2940bf46ca6df (diff) | |
download | FreeBSD-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.cc | 32 | ||||
-rw-r--r-- | contrib/libstdc++/config/io/c_io_stdio.h | 3 |
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 { |