http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47694

--- Comment #7 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-02-14 
21:23:27 UTC ---
The data is read via:
 read_a -> read_block_form -> read_sf -> fbuf_read

read_sf has the nice comment: "When reading sequential formatted records we
have a problem.  We don't know how long the line is until we read the trailing
newline, and we don't want to read too much. [...] Given this, the solution is
to read a byte at a time, stopping if we hit the newline."

However, the first action it does is:

  /* Read data into format buffer and scan through it.  */
  lorig = *length;
  base = p = fbuf_read (dtp->u.p.current_unit, length);

length is 1024 (cf. comment 0). Thus, [if (oldpos + *len > oldact)], it invokes
sread.

I think the solution is to read from the buffer until its end - and then call,
if needed, fbuf_read for the remaining "length-already_read" characters.
(I do not see whether there are additional issues, but this should solve at
least one issue.)

Reply via email to