This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug libstdc++/52169] New: the ifstream readsome() method does not signal any bit on eof.
- From: "viriketo at gmail dot com" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Wed, 08 Feb 2012 10:28:43 +0000
- Subject: [Bug libstdc++/52169] New: the ifstream readsome() method does not signal any bit on eof.
- Auto-submitted: auto-generated
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52169
Bug #: 52169
Summary: the ifstream readsome() method does not signal any bit
on eof.
Classification: Unclassified
Product: gcc
Version: 4.6.2
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: viriketo@gmail.com
Created attachment 26608
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=26608
Run it with "./c2 c2.cpp" and it will loop forever
The ifstream readsome() method does not signal any bit on eof, and I think it
should.
Therefore, these loops loop forever:
while(f && !f.eof())
{
char b[5000];
size_t read = f.readsome(b, sizeof b);
cerr << "Read: " << read << " bytes" << endl;
ostr.write(b, read);
}
According to http://www.cplusplus.com/reference/iostream/istream/readsome/ :
Errors are signaled by modifying the internal state flags:
eofbit The get pointer is at the end of the stream buffer's internal input
array when the function is called, meaning that there are no positions to be
read in the internal buffer (which may or not be the end of the input
sequence). This happens when rdbuf()->in_avail() would return -1 before the
first character is extracted.
failbit The stream was at the end of the source of characters before the
function was called.
badbit An error other than the above happened.