From 2394e52ebcbffc1801ab1383132e31bed9d5440d Mon Sep 17 00:00:00 2001 From: Benno Schulenberg Date: Wed, 16 Jul 2014 08:46:42 +0000 Subject: [PATCH] Making sure line renumbering starts far enough back after undoing a cut or paste. And fixing two memory leaks. Patch by Mark Majeres. git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@5067 35c25a1d-7b9e-4130-9fde-d3aeb78583b8 --- ChangeLog | 8 +++++++- src/nano.c | 4 ++++ src/text.c | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index d4f76f33..559b0fc1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ +2014-07-16 Mark Majeres + * src/text.c (do_undo): Make sure renumbering starts far enough back + after undoing a cut or paste. This fixes a segmentation fault when + undoing a repeated cutting and pasting of the first line of a file. + * src/nano.c (move_to_filestruct, copy_from_filestruct): Fix two leaks. + 2014-07-13 David Lawrence Ramsey - * ChangeLog: Typo fix + * ChangeLog: Typo fix. 2014-07-12 Benno Schulenberg * configure.ac: The warning about datarootdir being ignored is diff --git a/src/nano.c b/src/nano.c index 07c87cff..4b14852a 100644 --- a/src/nano.c +++ b/src/nano.c @@ -360,6 +360,9 @@ void move_to_filestruct(filestruct **file_top, filestruct **file_bot, *file_bot = openfile->filebot; } + openfile->fileage->next = NULL; + free_filestruct(openfile->fileage); + /* Renumber starting with the line after the original * file_bot. */ if (file_bot_save->next != NULL) @@ -447,6 +450,7 @@ void copy_from_filestruct(filestruct *somebuffer) /* Put the top and bottom of the current filestruct at the top and * bottom of a copy of the passed buffer. */ + free_filestruct(openfile->fileage); openfile->fileage = copy_filestruct(somebuffer); openfile->filebot = openfile->fileage; while (openfile->filebot->next != NULL) diff --git a/src/text.c b/src/text.c index e5315eb6..87e8a58b 100644 --- a/src/text.c +++ b/src/text.c @@ -504,10 +504,12 @@ void do_undo(void) case CUT: undidmsg = _("text cut"); undo_cut(u); + f = fsfromline(u->lineno); break; case PASTE: undidmsg = _("text uncut"); undo_paste(u); + f = fsfromline(u->lineno); break; case ENTER: undidmsg = _("line break"); -- 2.39.5