summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libcxx/include/istream4
-rw-r--r--libcxx/test/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp10
2 files changed, 11 insertions, 3 deletions
diff --git a/libcxx/include/istream b/libcxx/include/istream
index de8aa106723..d2d37768e52 100644
--- a/libcxx/include/istream
+++ b/libcxx/include/istream
@@ -1586,6 +1586,7 @@ getline(basic_istream<_CharT, _Traits>& __is,
{
__str.clear();
ios_base::iostate __err = ios_base::goodbit;
+ streamsize __extr = 0;
while (true)
{
typename _Traits::int_type __i = __is.rdbuf()->sbumpc();
@@ -1594,6 +1595,7 @@ getline(basic_istream<_CharT, _Traits>& __is,
__err |= ios_base::eofbit;
break;
}
+ ++__extr;
_CharT __ch = _Traits::to_char_type(__i);
if (_Traits::eq(__ch, __dlm))
break;
@@ -1604,7 +1606,7 @@ getline(basic_istream<_CharT, _Traits>& __is,
break;
}
}
- if (__str.empty())
+ if (__extr == 0)
__err |= ios_base::failbit;
__is.setstate(__err);
}
diff --git a/libcxx/test/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp b/libcxx/test/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp
index 656d531860b..d8e2fec5032 100644
--- a/libcxx/test/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp
+++ b/libcxx/test/strings/basic.string/string.nonmembers/string.io/get_line_delim.pass.cpp
@@ -21,7 +21,7 @@
int main()
{
{
- std::istringstream in(" abc* def* ghij");
+ std::istringstream in(" abc* def** ghij");
std::string s("initial text");
getline(in, s, '*');
assert(in.good());
@@ -30,11 +30,14 @@ int main()
assert(in.good());
assert(s == " def");
getline(in, s, '*');
+ assert(in.good());
+ assert(s == "");
+ getline(in, s, '*');
assert(in.eof());
assert(s == " ghij");
}
{
- std::wistringstream in(L" abc* def* ghij");
+ std::wistringstream in(L" abc* def** ghij");
std::wstring s(L"initial text");
getline(in, s, L'*');
assert(in.good());
@@ -43,6 +46,9 @@ int main()
assert(in.good());
assert(s == L" def");
getline(in, s, L'*');
+ assert(in.good());
+ assert(s == L"");
+ getline(in, s, L'*');
assert(in.eof());
assert(s == L" ghij");
}
OpenPOWER on IntegriCloud