vim-patch:9.1.0113: duplicate code when cleaning undo stack

Problem:  duplicate code when cleaning undo stack
Solution: refactor undo cleanup into a single public function

related: vim/vim#13928

9071ed8107

Co-authored-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
zeertzjq
2024-02-16 06:56:12 +08:00
parent c1fa8789c1
commit 163add40b8
4 changed files with 27 additions and 20 deletions

View File

@@ -2988,6 +2988,28 @@ void u_clearall(buf_T *buf)
buf->b_u_line_lnum = 0;
}
/// Free all allocated memory blocks for the buffer 'buf'.
void u_blockfree(buf_T *buf)
{
while (buf->b_u_oldhead != NULL) {
#ifndef NDEBUG
u_header_T *previous_oldhead = buf->b_u_oldhead;
#endif
u_freeheader(buf, buf->b_u_oldhead, NULL);
assert(buf->b_u_oldhead != previous_oldhead);
}
xfree(buf->b_u_line_ptr);
}
/// Free all allocated memory blocks for the buffer 'buf'.
/// and invalidate the undo buffer
void u_clearallandblockfree(buf_T *buf)
{
u_blockfree(buf);
u_clearall(buf);
}
/// Save the line "lnum" for the "U" command.
void u_saveline(buf_T *buf, linenr_T lnum)
{
@@ -3054,20 +3076,6 @@ void u_undoline(void)
check_cursor_col();
}
/// Free all allocated memory blocks for the buffer 'buf'.
void u_blockfree(buf_T *buf)
{
while (buf->b_u_oldhead != NULL) {
#ifndef NDEBUG
u_header_T *previous_oldhead = buf->b_u_oldhead;
#endif
u_freeheader(buf, buf->b_u_oldhead, NULL);
assert(buf->b_u_oldhead != previous_oldhead);
}
xfree(buf->b_u_line_ptr);
}
/// Allocate memory and copy curbuf line into it.
///
/// @param lnum the line to copy