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: unassig...@gcc.gnu.org
        ReportedBy: virik...@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.

Reply via email to