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); } }