avoid segfault when undoing to get back to empty buffer
This commit is contained in:
parent
fe9747390a
commit
807eba4448
@ -345,13 +345,13 @@ void PieceTable::insertion_test(Cursor & c)
|
|||||||
m_append_buffer[m_append_buffer_index++] = 'z';
|
m_append_buffer[m_append_buffer_index++] = 'z';
|
||||||
|
|
||||||
Change * change = &m_changes_buffer[m_changes_buffer_index++];
|
Change * change = &m_changes_buffer[m_changes_buffer_index++];
|
||||||
change->links[0][0][0] = c.iterator.piece->prev;
|
|
||||||
change->links[0][0][1] = c.iterator.piece;
|
|
||||||
change->links[0][1][0] = c.iterator.piece;
|
|
||||||
change->links[0][1][1] = c.iterator.piece->next;
|
|
||||||
|
|
||||||
if (c.iterator.valid())
|
if (c.iterator.valid())
|
||||||
{
|
{
|
||||||
|
change->links[0][0][0] = c.iterator.piece->prev;
|
||||||
|
change->links[0][0][1] = c.iterator.piece;
|
||||||
|
change->links[0][1][0] = c.iterator.piece;
|
||||||
|
change->links[0][1][1] = c.iterator.piece->next;
|
||||||
if (c.iterator.offset > 0u)
|
if (c.iterator.offset > 0u)
|
||||||
{
|
{
|
||||||
Piece * piece2 = add_piece();
|
Piece * piece2 = add_piece();
|
||||||
@ -395,6 +395,10 @@ void PieceTable::insertion_test(Cursor & c)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
change->links[0][0][0] = start_piece;
|
||||||
|
change->links[0][0][1] = end_piece;
|
||||||
|
change->links[0][1][0] = nullptr;
|
||||||
|
change->links[0][1][1] = nullptr;
|
||||||
change->links[1][0][0] = start_piece;
|
change->links[1][0][0] = start_piece;
|
||||||
change->links[1][0][1] = piece;
|
change->links[1][0][1] = piece;
|
||||||
change->links[1][1][0] = piece;
|
change->links[1][1][0] = piece;
|
||||||
@ -419,6 +423,9 @@ void PieceTable::apply_change(Change * change, uint8_t forward)
|
|||||||
{
|
{
|
||||||
change->links[forward][0][0]->next = change->links[forward][0][1];
|
change->links[forward][0][0]->next = change->links[forward][0][1];
|
||||||
change->links[forward][0][1]->prev = change->links[forward][0][0];
|
change->links[forward][0][1]->prev = change->links[forward][0][0];
|
||||||
change->links[forward][1][0]->next = change->links[forward][1][1];
|
if (change->links[forward][1][0] != nullptr)
|
||||||
change->links[forward][1][1]->prev = change->links[forward][1][0];
|
{
|
||||||
|
change->links[forward][1][0]->next = change->links[forward][1][1];
|
||||||
|
change->links[forward][1][1]->prev = change->links[forward][1][0];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user