diff options
| author | Howard Hinnant <hhinnant@apple.com> | 2013-03-06 19:27:56 +0000 |
|---|---|---|
| committer | Howard Hinnant <hhinnant@apple.com> | 2013-03-06 19:27:56 +0000 |
| commit | 65f58f3fe806f275867cf8d50e6a39349d8da8a0 (patch) | |
| tree | 6998767c4270223322cdfbf5a4d9f5e8286e13ea /libcxx | |
| parent | fcb37243f9906b1f2ea4c1aeff0a3438288df41f (diff) | |
| download | bcm5719-llvm-65f58f3fe806f275867cf8d50e6a39349d8da8a0.tar.gz bcm5719-llvm-65f58f3fe806f275867cf8d50e6a39349d8da8a0.zip | |
Have basic_istream::read call sgetn intead of sbumpc individual characters. This addresses http://llvm.org/bugs/show_bug.cgi?id=15427.
llvm-svn: 176573
Diffstat (limited to 'libcxx')
| -rw-r--r-- | libcxx/include/istream | 13 |
1 files changed, 3 insertions, 10 deletions
diff --git a/libcxx/include/istream b/libcxx/include/istream index 3979e140706..e484571c478 100644 --- a/libcxx/include/istream +++ b/libcxx/include/istream @@ -1216,16 +1216,9 @@ basic_istream<_CharT, _Traits>::read(char_type* __s, streamsize __n) sentry __sen(*this, true); if (__sen) { - for (; __gc_ < __n; ++__gc_) - { - typename traits_type::int_type __i = this->rdbuf()->sbumpc(); - if (traits_type::eq_int_type(__i, traits_type::eof())) - { - this->setstate(ios_base::failbit | ios_base::eofbit); - break; - } - *__s++ = traits_type::to_char_type(__i); - } + __gc_ = this->rdbuf()->sgetn(__s, __n); + if (__gc_ != __n) + this->setstate(ios_base::failbit | ios_base::eofbit); } else this->setstate(ios_base::failbit); |

