summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2009-04-18 15:07:23 +0200
committerYorhel <git@yorhel.nl>2009-04-18 15:07:23 +0200
commit3ad39f3741e958cb02ea2116bc512cbbefd089af (patch)
treea99d3044e92f96bc00383624f5790f6a920a489b
parent4a751f05645ecaf58847080828b3cc4fad5546cc (diff)
Don't touch the original tree while recalculating
This change makes it possible to still show the browser with correct (previous) data while calculating.
-rw-r--r--src/calc.c21
1 files 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)