Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
(_IO_new_file_overflow): Handle switching to write mode from read of …
…backup buffer.
  • Loading branch information
Ulrich Drepper committed Sep 6, 2003
1 parent edc7ae4 commit 483b8cc
Showing 1 changed file with 17 additions and 6 deletions.
23 changes: 17 additions & 6 deletions libio/fileops.c
Expand Up @@ -841,12 +841,23 @@ _IO_new_file_overflow (f, ch)
makes room for subsequent output.
Otherwise, set the read pointers to _IO_read_end (leaving that
alone, so it can continue to correspond to the external position). */
if (f->_IO_read_ptr == f->_IO_buf_end)
f->_IO_read_end = f->_IO_read_ptr = f->_IO_buf_base;
f->_IO_write_ptr = f->_IO_read_ptr;
f->_IO_write_base = f->_IO_write_ptr;
f->_IO_write_end = f->_IO_buf_end;
f->_IO_read_base = f->_IO_read_ptr = f->_IO_read_end;
if (__builtin_expect (_IO_in_backup (f), 0))
{
size_t nbackup = f->_IO_read_end - f->_IO_read_ptr;
_IO_free_backup_area (f);
f->_IO_read_base -= MIN (nbackup,
f->_IO_read_base - f->_IO_buf_base);
f->_IO_read_ptr = f->_IO_read_base;
}
else
{
if (f->_IO_read_ptr == f->_IO_buf_end)
f->_IO_read_end = f->_IO_read_ptr = f->_IO_buf_base;
f->_IO_write_ptr = f->_IO_read_ptr;
f->_IO_write_base = f->_IO_write_ptr;
f->_IO_write_end = f->_IO_buf_end;
f->_IO_read_base = f->_IO_read_ptr = f->_IO_read_end;
}

f->_flags |= _IO_CURRENTLY_PUTTING;
if (f->_mode <= 0 && f->_flags & (_IO_LINE_BUF+_IO_UNBUFFERED))
Expand Down

0 comments on commit 483b8cc

Please sign in to comment.