libstdc++/4419: ifstream::get(buffer,len) stops reading when an empty line appears.

pme@gcc.gnu.org pme@gcc.gnu.org
Mon Mar 11 13:35:00 GMT 2002


Synopsis: ifstream::get(buffer,len) stops reading when an empty line appears.

State-Changed-From-To: feedback->closed
State-Changed-By: pme
State-Changed-When: Mon Mar 11 13:35:41 2002
State-Changed-Why:
    The bug is in the user's code.  The standard specifies that if no characters are extracted -- which is the case when calling get() on an empty line -- then the stream's failbit is set.  The code should is not testing for failbit.
    
    Here is a modified testcase:
    
    
    #include <fstream>
    
    const int maxLineLength=200;
    
    int main(void)
    {
     std::ifstream fileToView("4419.data");
     char line[maxLineLength+1];
     int len=0;
     //while(!fileToView.eof())
     while(fileToView)
       {
        fileToView.get(line, sizeof line);
        char c;
        fileToView.get(c);      // grab trailing newline
        printf("%d (%d)\n",strlen(line),c);
        // Sanity stop
        if (++len==20) return 1;
       }
     printf("EOF: %d\n",fileToView.eof());
     printf("goodbit: %d\n",fileToView.good());
     printf("failbit: %d\n",fileToView.fail());
     printf("badbit: %d\n",fileToView.bad());
     return 0;
    }
    
    Note the change in the while condition.  Output is:
    
    10 (10)
    12 (10)
    0 (10)
    EOF: 0
    goodbit: 0
    failbit: 1
    badbit: 0
    
    So the condition is being indicated, but the user was only
    testing for EOF, not for a general "stop" condition.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=4419



More information about the Gcc-prs mailing list