From 3ad39f3741e958cb02ea2116bc512cbbefd089af Mon Sep 17 00:00:00 2001
From: Yorhel <git@yorhel.nl>
Date: Sat, 18 Apr 2009 15:07:23 +0200
Subject: [PATCH] Don't touch the original tree while recalculating

This change makes it possible to still show the browser with correct
(previous) data while calculating.
---
 src/calc.c | 21 ++++++++-------------
 1 file changed, 8 insertions(+), 13 deletions(-)

diff --git a/src/calc.c b/src/calc.c
index f6d55cb..7d8c261 100644
--- a/src/calc.c
+++ b/src/calc.c
@@ -414,24 +414,11 @@ void calc_process() {
   t->size = fs.st_blocks * S_BLKSIZE;
   t->asize = fs.st_size;
   t->flags |= FF_DIR;
-  if(orig) {
-    t->parent = orig->parent;
-    t->next = orig->next;
-  }
   t->name = (char *) malloc(strlen(tmp)+1);
   strcpy(t->name, orig ? orig->name : tmp);
   root = t;
   curdev = fs.st_dev;
 
-  /* update parents, if any */
-  if(orig) {
-    for(t=t->parent; t!=NULL; t=t->parent) {
-      t->size += root->size;
-      t->asize += root->asize;
-      t->items++;
-    }
-  }
-
   /* start calculating */
   if(!calc_dir(root, tmp) && !failed) {
     pstate = ST_BROWSE;
@@ -439,6 +426,14 @@ void calc_process() {
 
     /* update references and free original item */
     if(orig) {
+      root->parent = orig->parent;
+      root->next = orig->next;
+      for(t=root->parent; t!=NULL; t=t->parent) {
+        t->size += root->size;
+        t->asize += root->asize;
+        t->items += root->items+1;
+      }
+
       if(orig->parent) {
         t = orig->parent->sub;
         if(t == orig)
-- 
GitLab