summaryrefslogtreecommitdiffstats
path: root/rbutil/rbutilqt/base/utils.cpp
diff options
context:
space:
mode:
authorDominik Riebeling <Dominik.Riebeling@gmail.com>2011-07-26 20:54:44 +0000
committerDominik Riebeling <Dominik.Riebeling@gmail.com>2011-07-26 20:54:44 +0000
commit743308e8828d36ce53fbf25a6fd815dad74b7d59 (patch)
tree4b3431410c2bdafc3e66541dee9e7733bc59e7b9 /rbutil/rbutilqt/base/utils.cpp
parent3bb0fed345d72c7bf944ab490a249463ed150586 (diff)
downloadrockbox-743308e8828d36ce53fbf25a6fd815dad74b7d59.tar.gz
rockbox-743308e8828d36ce53fbf25a6fd815dad74b7d59.tar.bz2
rockbox-743308e8828d36ce53fbf25a6fd815dad74b7d59.zip
Take cluster size into account when calculating zip extracted size.
Allow passing an (optional) cluster size to round up all file sizes when calculating the total size of an extracted zip archive. This allows to check if the space on disk is actually sufficient without relying on an arbitrary headroom value which might be wrong. Addresses FS#12195. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@30214 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'rbutil/rbutilqt/base/utils.cpp')
-rw-r--r--rbutil/rbutilqt/base/utils.cpp31
1 files changed, 28 insertions, 3 deletions
diff --git a/rbutil/rbutilqt/base/utils.cpp b/rbutil/rbutilqt/base/utils.cpp
index 1fdf627378..ca3a6d2256 100644
--- a/rbutil/rbutilqt/base/utils.cpp
+++ b/rbutil/rbutilqt/base/utils.cpp
@@ -187,13 +187,25 @@ QString Utils::filesystemName(QString path)
//! @return size in bytes
qulonglong Utils::filesystemFree(QString path)
{
- return filesystemSize(path, FilesystemFree);
+ qulonglong size = filesystemSize(path, FilesystemFree);
+ qDebug() << "[Utils] free disk space for" << path << size;
+ return size;
}
qulonglong Utils::filesystemTotal(QString path)
{
- return filesystemSize(path, FilesystemTotal);
+ qulonglong size = filesystemSize(path, FilesystemTotal);
+ qDebug() << "[Utils] total disk space for" << path << size;
+ return size;
+}
+
+
+qulonglong Utils::filesystemClusterSize(QString path)
+{
+ qulonglong size = filesystemSize(path, FilesystemClusterSize);
+ qDebug() << "[Utils] cluster size for" << path << size;
+ return size;
}
@@ -214,6 +226,9 @@ qulonglong Utils::filesystemSize(QString path, enum Utils::Size type)
if(type == FilesystemTotal) {
size = (qulonglong)fs.f_frsize * (qulonglong)fs.f_blocks;
}
+ if(type == FilesystemClusterSize) {
+ size = (qulonglong)fs.f_frsize;
+ }
}
#endif
#if defined(Q_OS_WIN32)
@@ -230,9 +245,19 @@ qulonglong Utils::filesystemSize(QString path, enum Utils::Size type)
if(type == FilesystemTotal) {
size = totalNumberBytes.QuadPart;
}
+ if(type == FilesystemClusterSize) {
+ DWORD sectorsPerCluster;
+ DWORD bytesPerSector;
+ DWORD freeClusters;
+ DWORD totalClusters;
+ ret = GetDiskFreeSpaceW((LPCTSTR)path.utf16(), &sectorsPerCluster,
+ &bytesPerSector, &freeClusters, &totalClusters);
+ if(ret) {
+ size = bytesPerSector * sectorsPerCluster;
+ }
+ }
}
#endif
- qDebug() << "[Utils] Filesystem:" << path << size;
return size;
}