fix Buffer::write_to_file() to preserve EOLs correctly

This commit is contained in:
Josh Holtrop 2016-10-25 20:47:54 -04:00
parent 1f59e4d042
commit ef717faa16

View File

@ -85,12 +85,18 @@ bool Buffer::write_to_file(const char * filename)
piece != piece_table->end_piece;
piece = piece->next)
{
if (!file.write(piece->start, piece->length))
uint32_t length = piece->length;
if (piece->eol())
{
length--;
}
if (!file.write(piece->start, length))
{
return false;
}
bytes_written += piece->length;
if (piece->eol())
bytes_written += length;
if (((piece->next != piece_table->end_piece) && piece->eol()) ||
(m_eol_at_eof && bytes_written > 0u))
{
if (!file.write(LineEndings::spans[m_line_endings]))
{
@ -100,14 +106,6 @@ bool Buffer::write_to_file(const char * filename)
}
}
if (m_eol_at_eof && bytes_written > 0u)
{
if (!file.write(LineEndings::spans[m_line_endings]))
{
return false;
}
}
return true;
}