diff options
author | Yorhel <git@yorhel.nl> | 2009-04-18 15:07:23 +0200 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2009-04-18 15:07:23 +0200 |
commit | 3ad39f3741e958cb02ea2116bc512cbbefd089af (patch) | |
tree | a99d3044e92f96bc00383624f5790f6a920a489b | |
parent | 4a751f05645ecaf58847080828b3cc4fad5546cc (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.c | 21 |
1 files changed, 8 insertions, 13 deletions
@@ -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) |