[SCM] Kaboom - Debian KDE 3->4 migration tool branch, master, updated. master/0.9.1-2-gb328837
George Kiagiadakis
gkiagia-guest at alioth.debian.org
Mon Mar 16 21:10:18 UTC 2009
The following commit has been merged in the master branch:
commit b328837558b39affb581a918e09701c1295a1516
Author: George Kiagiadakis <gkiagia at users.sourceforge.net>
Date: Mon Mar 16 23:09:17 2009 +0200
Use lstat() instead of QFileInfo::size().
I hope this fixes the remaining directory size calculation issues.
Please test.
diff --git a/diroperations/recursivedirjob.cpp b/diroperations/recursivedirjob.cpp
index eedb378..c2297c7 100644
--- a/diroperations/recursivedirjob.cpp
+++ b/diroperations/recursivedirjob.cpp
@@ -21,6 +21,15 @@
#include <QtCore/QStack>
#include <QtCore/QDebug>
+#include <cstdio> //for perror()
+#include <cstdlib> //for abort()
+
+//for lstat()
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
using namespace DirOperations;
struct RecursiveDirJob::Private
@@ -114,8 +123,18 @@ void RecursiveDirJob::run()
}
}
+static quint64 stat_size(const QString & fileName)
+{
+ struct stat buf;
+ if ( ::lstat(QFile::encodeName(fileName), &buf) != 0 ) {
+ perror("lstat");
+ abort();
+ }
+ return buf.st_size;
+}
+
//constant defining the QDir filters that are used in the RecursiveDirJobHelper functions
-const QDir::Filters dirFilters = QDir::AllEntries | QDir::NoDotAndDotDot |
+static const QDir::Filters dirFilters = QDir::AllEntries | QDir::NoDotAndDotDot |
QDir::Hidden | QDir::System | QDir::CaseSensitive;
quint64 RecursiveDirJobHelper::calculateDirSize(const QString & dir)
@@ -139,7 +158,7 @@ quint64 RecursiveDirJobHelper::calculateDirSize(const QString & dir)
while(1){
if ( !currentList.isEmpty() ){
currentItem = currentList.takeFirst();
- totalSize += currentItem.size();
+ totalSize += stat_size(currentItem.absoluteFilePath());
if ( currentItem.isDir() && !currentItem.isSymLink() ) {
if ( !currentDir.cd(currentItem.fileName()) )
@@ -161,7 +180,8 @@ quint64 RecursiveDirJobHelper::calculateDirSize(const QString & dir)
}
}
- totalSize += QFileInfo(dir).size();
+ totalSize += stat_size(dir);
+ qDebug() << "calculateDirSize" << dir << totalSize;
return totalSize;
}
@@ -193,7 +213,7 @@ void RecursiveDirJobHelper::recursiveCpDir(const QString & sourcePath, const QSt
if (dirSize > 0) {
emit setMaximum(dirSize);
//the directory special file is already (almost) copied in dest.mkdir() above
- bytesCopied += QFileInfo(sourcePath).size();
+ bytesCopied += stat_size(sourcePath);
emit setValue(bytesCopied);
} else {
//no files to be copied, so set the progressbar to 100%
@@ -251,7 +271,7 @@ void RecursiveDirJobHelper::recursiveCpDir(const QString & sourcePath, const QSt
}
if ( m_reportProgress ) {
- bytesCopied += currentItem.size();
+ bytesCopied += stat_size(currentItem.absoluteFilePath());
emit setValue(bytesCopied);
}
}
@@ -296,7 +316,7 @@ void RecursiveDirJobHelper::recursiveRmDir(const QString & dir)
//we do this before starting removing files, because on some filesystems
//(like reiserfs) the directory size is variable and will be smaller
//when all files have been removed
- bytesRemoved += QFileInfo(dir).size();
+ bytesRemoved += stat_size(dir);
emit setValue(bytesRemoved);
} else {
//no files to be removed, so set the progressbar to 100%
@@ -311,7 +331,7 @@ void RecursiveDirJobHelper::recursiveRmDir(const QString & dir)
currentItem = currentList.takeFirst();
if ( m_reportProgress ) {
- bytesRemoved += currentItem.size();
+ bytesRemoved += stat_size(currentItem.absoluteFilePath());
emit setValue(bytesRemoved);
}
--
Kaboom - Debian KDE 3->4 migration tool
More information about the pkg-kde-commits
mailing list