diff --git a/src/core/Buffer.cc b/src/core/Buffer.cc index 1e30d7f..57f45b7 100644 --- a/src/core/Buffer.cc +++ b/src/core/Buffer.cc @@ -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; }