]> git.wh0rd.org Git - nano.git/commitdiff
2008-10-13 Chris Allegretta <chrisa@asty.org>
authorChris Allegretta <chrisa@asty.org>
Tue, 14 Oct 2008 01:14:12 +0000 (01:14 +0000)
committerChris Allegretta <chrisa@asty.org>
Tue, 14 Oct 2008 01:14:12 +0000 (01:14 +0000)
        * Remove CUTTOEND as an undo type as it's unneeded, fix u->to_end logic in undo struct.
        * undo.c (update_undo): Don't free cutbuffer if NULL, fix for Savannah bug #24499

git-svn-id: svn://svn.savannah.gnu.org/nano/trunk/nano@4339 35c25a1d-7b9e-4130-9fde-d3aeb78583b8

ChangeLog
src/cut.c
src/nano.h
src/text.c

index 5f0f1321cd5cc5e6fc5e0e0112b82a992503c967..c14b7245a4ad9169532338b49d23704f9109b560 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2008-10-13 Chris Allegretta <chrisa@asty.org>
+       * Remove CUTTOEND as an undo type as it's unneeded, fix u->to_end logic in undo struct.
+       * undo.c (update_undo): Don't free cutbuffer if NULL, fix for Savannah bug #24499
+
 2008-10-04 Chris Allegretta <chrisa@asty.org>
        * cut.c (Add_undo): Save last cut undo information so it can be used for next uncut, fixes
          Savannah bug 24183.
index 26899864ea919e0371a336a8924859346b00f895..f92f9b3c4e99b1d8efeb6d441388f1b1feab5be5 100644 (file)
--- a/src/cut.c
+++ b/src/cut.c
@@ -245,7 +245,7 @@ void do_copy_text(void)
 void do_cut_till_end(void)
 {
 #ifndef NANO_TINY
-    add_undo(CUTTOEND);
+    add_undo(CUT);
 #endif
     do_cut_text(FALSE, TRUE, FALSE);
 }
index c82122d61515a8cdbe803238f8bc98802571710e..3bc10f1b252cb64ba4a94372bcd2315392c52092 100644 (file)
@@ -170,7 +170,7 @@ typedef enum {
 }  function_type;
 
 typedef enum {
-    ADD, DEL, REPLACE, SPLIT, UNSPLIT, CUT, CUTTOEND, UNCUT, INSERT, OTHER
+    ADD, DEL, REPLACE, SPLIT, UNSPLIT, CUT, UNCUT, INSERT, OTHER
 } undo_type;
 
 /* Structure types. */
index 97e1f1900fabfb6e48672350ca08ca4fc7895da3..915d1c186f8ebf0ab859ee3e28cf124fdfe0b12e 100644 (file)
@@ -408,7 +408,7 @@ void redo_cut(undo *u) {
 #ifdef DEBUG
            fprintf(stderr, "Undoing multi-^K cut, u->linescut = %d\n", u->linescut);
 #endif
-           for (i = 0, t = openfile->current; i < u->linescut; i++) {
+           for (i = 0, t = openfile->current; i < u->linescut && t->next != NULL ; i++) {
 
 #ifdef DEBUG
            fprintf(stderr, "Advancing, lineno  = %d, data = \"%s\"\n", t->lineno, t->data);
@@ -505,7 +505,6 @@ void do_undo(void)
        renumber(f);
        break;
     case CUT:
-    case CUTTOEND:
        undidmsg = _("text cut");
         undo_cut(u);
        break;
@@ -629,7 +628,6 @@ void do_redo(void)
        renumber(f);
        break;
     case CUT:
-    case CUTTOEND:
        undidmsg = _("text cut");
        redo_cut(u);
        break;
@@ -890,13 +888,12 @@ void add_undo(undo_type current_action)
        u->strdata = data;
        break;
     case CUT:
-    case CUTTOEND:
        u->mark_set = openfile->mark_set;
        if (u->mark_set) {
            u->mark_begin_lineno = openfile->mark_begin->lineno;
            u->mark_begin_x = openfile->mark_begin_x;
        }
-       u->to_end = (current_action == CUTTOEND);
+       u->to_end = (ISSET(CUT_TO_END)) ? TRUE : FALSE;
        last_cutu = u;
        break;
     case UNCUT:
@@ -951,7 +948,7 @@ void update_undo(undo_type action)
     /* Change to an add if we're not using the same undo struct
        that we should be using */
     if (action != fs->last_action
-       || (action != CUT && action != CUTTOEND && action != INSERT
+       || (action != CUT && action != INSERT
            && openfile->current->lineno != fs->current_undo->lineno)) {
         add_undo(action);
        return;
@@ -1016,7 +1013,8 @@ void update_undo(undo_type action)
 #endif
        break;
     case CUT:
-    case CUTTOEND:
+       if (!cutbuffer)
+           break;
        if (u->cutbuffer)
            free(u->cutbuffer);
        u->cutbuffer = copy_filestruct(cutbuffer);