From dcb652ca5af20c9377a6c1d9e5b9c5436643f91c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sun, 19 Jun 2011 18:38:31 +0000 Subject: [PATCH] * Fixed ignoring the result of GetStat() which could cause random values to be counted (for example already if a directory didn't have its X bit set). * Instead of doing weird heuristics assuming the size on disk, use the actual value the file system reports. This might have side effects on file systems that don't report those correctly, which can then be fixed :-) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@42252 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/kits/tracker/FSUtils.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/kits/tracker/FSUtils.cpp b/src/kits/tracker/FSUtils.cpp index 831b37c287..22a12cb63d 100644 --- a/src/kits/tracker/FSUtils.cpp +++ b/src/kits/tracker/FSUtils.cpp @@ -2337,8 +2337,8 @@ FSMakeOriginalName(char *name, BDirectory *destDir, const char *suffix) status_t -FSRecursiveCalcSize(BInfoWindow *window, CopyLoopControl* loopControl, - BDirectory *dir, off_t *running_size, int32 *fileCount, int32 *dirCount) +FSRecursiveCalcSize(BInfoWindow* window, CopyLoopControl* loopControl, + BDirectory* dir, off_t* _runningSize, int32* _fileCount, int32* _dirCount) { dir->Rewind(); BEntry entry; @@ -2351,21 +2351,21 @@ FSRecursiveCalcSize(BInfoWindow *window, CopyLoopControl* loopControl, return kUserCanceled; StatStruct statbuf; - entry.GetStat(&statbuf); + status_t status = entry.GetStat(&statbuf); + if (status != B_OK) + return status; + + (*_runningSize) += statbuf.st_blocks * 512; if (S_ISDIR(statbuf.st_mode)) { BDirectory subdir(&entry); - (*dirCount)++; - (*running_size) += 1024; - status_t result = FSRecursiveCalcSize(window, loopControl, &subdir, - running_size, fileCount, dirCount); - if (result != B_OK) - return result; - } else { - (*fileCount)++; - (*running_size) += statbuf.st_size + 1024; - // Add to compensate for attributes. - } + (*_dirCount)++; + status = FSRecursiveCalcSize(window, loopControl, &subdir, + _runningSize, _fileCount, _dirCount); + if (status != B_OK) + return status; + } else + (*_fileCount)++; } return B_OK; }