]> git.wh0rd.org Git - nano.git/commitdiff
Storing and retrieving the correct file size before and after an action.
authorBenno Schulenberg <bensberg@justemail.net>
Mon, 30 Nov 2015 16:21:51 +0000 (16:21 +0000)
committerBenno Schulenberg <bensberg@justemail.net>
Mon, 30 Nov 2015 16:21:51 +0000 (16:21 +0000)
This fixes Savannah bug #45523.

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

ChangeLog
src/nano.h
src/text.c

index 9ba5f93587f9d34f4160ac5de289b46f34f80c15..6f6628c72a882afde4a8f309405d523dce15ca5f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,9 @@
        and NONEWLINES is set, there is no next line at which to put the
        cutting point for a redo.  So put it at the very end of the cut.
        This fixes Savannah bug #46541.
+       * src/text.c (add_undo, update_undo, do_undo, do_redo), src/nano.h:
+       Store and retrieve the correct file size before and after an action.
+       This fixes Savannah bug #45523.
 
 2015-11-29  Benno Schulenberg  <bensberg@justemail.net>
        * src/color.c (reset_multis): Evaluate correctly whether to reset
index b2604a1782dc1b5f9afada1ee57dbfaca40510d1..e9293e18789af726f5e20473a143a7121b3da96d 100644 (file)
@@ -329,6 +329,10 @@ typedef struct undo {
        /* Where did this action begin or end. */
     char *strdata;
        /* String type data we will use for copying the affected line back. */
+    size_t wassize;
+       /* The file size before the action. */
+    size_t newsize;
+       /* The file size after the action. */
     int xflags;
        /* Some flag data we need. */
 
index ff9872b76ee06a5d4d49234dfe03927d0256903a..2a2a51612ecd029ad0d93100cea4ec36e59e8312 100644 (file)
@@ -611,6 +611,7 @@ void do_undo(void)
     openfile->current_undo = openfile->current_undo->next;
     openfile->last_action = OTHER;
     openfile->placewewant = xplustabs();
+    openfile->totsize = u->wassize;
     set_modified();
 }
 
@@ -748,6 +749,7 @@ void do_redo(void)
     openfile->current_undo = u;
     openfile->last_action = OTHER;
     openfile->placewewant = xplustabs();
+    openfile->totsize = u->newsize;
     set_modified();
 }
 #endif /* !NANO_TINY */
@@ -957,12 +959,14 @@ void add_undo(undo_type action)
     u->mark_begin_lineno = openfile->current->lineno;
     u->mark_begin_x = openfile->current_x;
     u->mark_set = FALSE;
+    u->wassize = openfile->totsize;
     u->xflags = 0;
 
     switch (u->type) {
     /* We need to start copying data into the undo buffer
      * or we won't be able to restore it later. */
     case ADD:
+       u->wassize--;
        break;
     case BACK:
        /* If the next line is the magic line, don't ever undo this
@@ -1065,6 +1069,8 @@ fprintf(stderr, "  >> Updating... action = %d, openfile->last_action = %d, openf
     assert(openfile->undotop != NULL);
     u = openfile->undotop;
 
+    u->newsize = openfile->totsize;
+
     switch (u->type) {
     case ADD: {
 #ifdef DEBUG