summaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/std/istream
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2009-01-01 10:08:31 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2009-01-01 10:08:31 +0000
commit91a96b33a9b71785d7372b87824a40da43e5384b (patch)
tree2f7f4c2f400081d70719dc09252bf8c9ece1c01e /libstdc++-v3/include/std/istream
parentedc31cc1297aa61bcc8b5448778152733441ffe3 (diff)
re PR libstdc++/38678 ([DR XXX] istream::read() calls streambuf::sgetn())
2009-01-01 Paolo Carlini <paolo.carlini@oracle.com> PR libstdc++/38678 * include/std/istream (basic_istream<>::_M_read): New. * include/bits/istream.tcc (basic_istream<>::_M_read): Define. (basic_istream<>::read, basic_istream<>::readsome): Use it. * include/std/ostream (basic_ostream<>::_M_write_): New. (basic_ostream<>::_M_write): Adjust. * include/bits/ostream.tcc (basic_ostream<>::_M_write_): Define. * testsuite/27_io/basic_istream/read/char/38678.cc: New. * testsuite/27_io/basic_istream/read/wchar_t/38678.cc: Likewise. * testsuite/27_io/basic_ostream/write/char/38678.cc: Likewise. * testsuite/27_io/basic_ostream/write/wchar_t/38678.cc: Likewise. From-SVN: r142994
Diffstat (limited to 'libstdc++-v3/include/std/istream')
-rw-r--r--libstdc++-v3/include/std/istream19
1 files changed, 18 insertions, 1 deletions
diff --git a/libstdc++-v3/include/std/istream b/libstdc++-v3/include/std/istream
index 8b87c73fc1b..f88b2f2c07c 100644
--- a/libstdc++-v3/include/std/istream
+++ b/libstdc++-v3/include/std/istream
@@ -1,7 +1,7 @@
// Input streams -*- C++ -*-
// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
-// 2006, 2007, 2008
+// 2006, 2007, 2008, 2009
// Free Software Foundation, Inc.
//
// This file is part of the GNU ISO C++ Library. This library is free
@@ -586,11 +586,28 @@ _GLIBCXX_BEGIN_NAMESPACE(std)
: _M_gcount(streamsize(0))
{ this->init(0); }
+ streamsize
+ _M_read(char_type* __s, streamsize __n);
+
template<typename _ValueT>
__istream_type&
_M_extract(_ValueT& __v);
};
+ template<>
+ inline streamsize
+ basic_istream<char>::
+ _M_read(char_type* __s, streamsize __n)
+ { return this->rdbuf()->__streambuf_type::xsgetn(__s, __n); }
+
+#ifdef _GLIBCXX_USE_WCHAR_T
+ template<>
+ inline streamsize
+ basic_istream<wchar_t>::
+ _M_read(char_type* __s, streamsize __n)
+ { return this->rdbuf()->__streambuf_type::xsgetn(__s, __n); }
+#endif
+
// Explicit specialization declarations, defined in src/istream.cc.
template<>
basic_istream<char>&