aboutsummaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/bits/fstream.tcc
diff options
context:
space:
mode:
authorBenjamin Kosnik <bkoz@gcc.gnu.org>2003-10-16 22:37:53 +0000
committerBenjamin Kosnik <bkoz@gcc.gnu.org>2003-10-16 22:37:53 +0000
commit4c4809c175d40cfe30020c00e31959147005b411 (patch)
treeace03b23724b8ff5b0ec175af9fd1e176033b3cd /libstdc++-v3/include/bits/fstream.tcc
parentdc17fe76617d48a706bc27d96f1bcb138c1f7b8c (diff)
downloadgcc-4c4809c175d40cfe30020c00e31959147005b411.zip
gcc-4c4809c175d40cfe30020c00e31959147005b411.tar.gz
gcc-4c4809c175d40cfe30020c00e31959147005b411.tar.bz2
[multiple changes]
2003-10-16 Petur Runolfsson <peturr02@ru.is> PR libstdc++/8610 PR libstdc++/11450 PR libstdc++/11543 PR libstdc++/12065 * config/io/basic_file_stdio.cc (__basic_file::seekoff): Change return value from streampos to streamoff. (__basic_file::seekpos): Delete. * config/io/basic_file_stdio.h: Same. * config/io/c_io_stdio.h: Remove streamoff and wstreamsize typedefs. * include/Makefile.am (bits_headers): Add bits/postypes.h. * include/bits/char_traits.h: Include bits/postypes.h instead of bits/fpos.h. * include/bits/fstream.tcc (basic_filebuf::open, basic_filebuf::pbackfail): Don't use < or >= to compare pos_type values, use == and != instead. (basic_filebuf::_M_seek): Use explicit conversion from streamoff to pos_type. (basic_filebuf::imbue): Don't use ! on pos_type values, use == instead. Don't use __check_facet(_M_codecvt) unless is_open(). * include/bits/postypes.h: New file. Add __streamoff_base_type typedef, streamsize. (streamoff, streampos, wstreampos): Define typedefs, with streamoff defined as... (streamoff): New class. Document implementation defined aspects. (fpos): New implementation. Document implementation defined aspects. * include/bits/sstream.tcc (basic_stringbuf::seekpos): Use explicit conversion from pos_type to off_type. * include/std/std_iosfwd.h: Include bits/postypes.h instead of bits/fpos.h. * testsuite/27_io/basic_filebuf/seekoff/char/11543.cc: New test. * testsuite/27_io/basic_filebuf/seekoff/wchar_t/11543.cc: New test. * testsuite/27_io/fpos/11450.cc: New test. * testsuite/27_io/fpos/mbstate_t/12065.cc: New test. * testsuite/27_io/fpos/mbstate_t/4_neg.cc: New test. * testsuite/27_io/types/3.cc: New test. 2003-10-16 Benjamin Kosnik <bkoz@redhat.com> * configure.host: Remove fpos_include_dir. * configure.ac: Remove FPOS_INC_SRCDIR. * configure: Regenerate. * acinclude.m4 (GLIBCXX_ENABLE_CSTDIO): Remove FPOS_H. * aclocal.m4: Regenerate. * include/Makefile.am (host_headers): Remove fpos.h. (bits_headers): Add postypes.h. * include/Makefile.in: Regenerate. * config/os/gnu-linux/fposh: Remove. * config/os/generic/fpos.h: Remove. * testsuite/27_io/basic_filebuf/seekoff/char/1-in.cc: Fixup. * testsuite/27_io/basic_filebuf/seekoff/char/1-io.cc: Same. * testsuite/27_io/basic_filebuf/seekoff/char/1-out.cc: Same. * testsuite/27_io/basic_filebuf/seekoff/char/2-in.cc: Same. * testsuite/27_io/basic_filebuf/seekoff/char/2-io.cc: Same. * testsuite/27_io/basic_filebuf/seekoff/char/2-out.cc: Same. * testsuite/27_io/basic_filebuf/seekpos/char/1-in.cc: Same. * testsuite/27_io/basic_filebuf/seekpos/char/1-io.cc: Same. * testsuite/27_io/basic_filebuf/seekpos/char/1-out.cc: Same. * testsuite/27_io/basic_filebuf/seekpos/char/2-in.cc: Same. * testsuite/27_io/basic_filebuf/seekpos/char/2-io.cc: Same. * testsuite/27_io/basic_filebuf/seekpos/char/2-out.cc: Same. * testsuite/27_io/basic_istream/seekg/char/2.cc: Same. * testsuite/27_io/basic_stringbuf/seekoff/char/1.cc: Same. * testsuite/27_io/basic_stringbuf/seekpos/char/1.cc: Same. * testsuite/27_io/fpos/mbstate_t/3.cc: Same. * testsuite/27_io/objects/char/10.cc: Same. From-SVN: r72582
Diffstat (limited to 'libstdc++-v3/include/bits/fstream.tcc')
-rw-r--r--libstdc++-v3/include/bits/fstream.tcc52
1 files changed, 32 insertions, 20 deletions
diff --git a/libstdc++-v3/include/bits/fstream.tcc b/libstdc++-v3/include/bits/fstream.tcc
index f6f1b75..a93459a 100644
--- a/libstdc++-v3/include/bits/fstream.tcc
+++ b/libstdc++-v3/include/bits/fstream.tcc
@@ -106,7 +106,8 @@ namespace std
// 27.8.1.3,4
if ((__mode & ios_base::ate)
- && this->seekoff(0, ios_base::end, __mode) < 0)
+ && this->seekoff(0, ios_base::end, __mode)
+ == pos_type(off_type(-1)))
this->close();
else
__ret = this;
@@ -333,7 +334,7 @@ namespace std
this->gbump(-1);
__tmp = traits_type::to_int_type(*this->gptr());
}
- else if (this->seekoff(-1, ios_base::cur) >= 0)
+ else if (this->seekoff(-1, ios_base::cur) != pos_type(off_type(-1)))
{
__tmp = this->underflow();
if (traits_type::eq_int_type(__tmp, __ret))
@@ -653,7 +654,7 @@ namespace std
}
// Returns pos_type(off_type(-1)) in case of failure.
- pos_type __ret = _M_file.seekoff(__off, __way);
+ pos_type __ret (_M_file.seekoff(__off, __way));
_M_reading = false;
_M_writing = false;
@@ -673,24 +674,35 @@ namespace std
basic_filebuf<_CharT, _Traits>::
imbue(const locale& __loc)
{
- const bool __testbeg = !this->seekoff(0, ios_base::cur, this->_M_mode);
- const bool __teststate = __check_facet(_M_codecvt).encoding() == -1;
-
- if (this->_M_buf_locale != __loc
- && (!this->is_open() || (__testbeg && !__teststate)))
+ if (this->_M_buf_locale != __loc)
{
- this->_M_buf_locale = __loc;
- if (__builtin_expect(has_facet<__codecvt_type>(__loc), true))
- _M_codecvt = &use_facet<__codecvt_type>(__loc);
- else
- _M_codecvt = 0;
-
- // NB This may require the reconversion of previously
- // converted chars. This in turn may cause the
- // reconstruction of the original file. YIKES!! This
- // implementation interprets this requirement as requiring
- // the file position be at the beginning, and a stateless
- // encoding, or that the filebuf be closed. Opinions may differ.
+ bool __testfail = false;
+ if (this->is_open())
+ {
+ const bool __testbeg =
+ this->seekoff(0, ios_base::cur, this->_M_mode) ==
+ pos_type(off_type(0));
+ const bool __teststate =
+ __check_facet(_M_codecvt).encoding() == -1;
+
+ __testfail = !__testbeg || __teststate;
+ }
+
+ if (!__testfail)
+ {
+ this->_M_buf_locale = __loc;
+ if (__builtin_expect(has_facet<__codecvt_type>(__loc), true))
+ _M_codecvt = &use_facet<__codecvt_type>(__loc);
+ else
+ _M_codecvt = 0;
+
+ // NB This may require the reconversion of previously
+ // converted chars. This in turn may cause the
+ // reconstruction of the original file. YIKES!! This
+ // implementation interprets this requirement as requiring
+ // the file position be at the beginning, and a stateless
+ // encoding, or that the filebuf be closed. Opinions may differ.
+ }
}
_M_last_overflowed = false;
}