From 748ff13bcee5404084046bb71a94d3007a14cb6a Mon Sep 17 00:00:00 2001 From: Daniel Molkentin Date: Sun, 7 Jul 2013 01:23:25 +0200 Subject: [PATCH] Utility::freeDiskSpace() Does not yet work for UNC locations --- src/mirall/utility.cpp | 30 +++++++++++++++++++++++++++--- src/mirall/utility.h | 1 + 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/mirall/utility.cpp b/src/mirall/utility.cpp index a2e22b69c5..6609b3a2b6 100644 --- a/src/mirall/utility.cpp +++ b/src/mirall/utility.cpp @@ -23,11 +23,14 @@ #include #include -#ifdef Q_OS_MAC +#ifdef Q_OS_UNIX +#include +#include +#elif defined(Q_OS_MAC) #include -#endif -#ifdef Q_OS_WIN +#elif defined(Q_OS_WIN) #include +#include #endif namespace Mirall { @@ -240,4 +243,25 @@ void Utility::setLaunchOnStartup(const QString &appName, const QString& guiName, #endif } +qint64 Utility::freeDiskSpace(const QString &path, bool *ok) +{ +#ifdef Q_OS_UNIX + Q_UNUSED(ok) + struct statvfs64 stat; + statvfs64(path.toUtf8().data(), &stat); + return (qint64) stat.f_bavail * stat.f_frsize; +#elif defined(Q_OS_WIN) + ULARGE_INTEGER freeBytes; + freeBytes.QuadPart = 0L; + QString drive = QDir().absoluteFilePath(path).left(2); + if( !GetDiskFreeSpaceEx( reinterpret_cast(drive.utf16()), &freeBytes, NULL, NULL ) ) { + if (ok) *ok = false; + } + return freeBytes.QuadPart; +#else + if (ok) *ok = false; + return 0; +#endif +} + } // namespace Mirall diff --git a/src/mirall/utility.h b/src/mirall/utility.h index e15f12cd7b..ef0d7e7823 100644 --- a/src/mirall/utility.h +++ b/src/mirall/utility.h @@ -31,6 +31,7 @@ namespace Utility void raiseDialog(QWidget *); bool hasLaunchOnStartup(const QString &appName); void setLaunchOnStartup(const QString &appName, const QString& guiName, bool launch); + qint64 freeDiskSpace(const QString &path, bool *ok = 0); } }