From 706362333d6983e131d9cab754f1854556ba0aea Mon Sep 17 00:00:00 2001 From: Christophe Dumez Date: Mon, 17 Aug 2009 14:53:41 +0000 Subject: [PATCH] - Attempt to support FreeDiskSpace() on Windows platform * Totally untested, not even sure it compiles but if not it should be easy to fix --- src/misc.h | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/src/misc.h b/src/misc.h index 058bee814..f4e9b93c6 100644 --- a/src/misc.h +++ b/src/misc.h @@ -44,6 +44,8 @@ #ifndef Q_WS_WIN #include +#else +#include #endif #include @@ -103,14 +105,36 @@ public: struct statfs stats; int ret = statfs ((path+"/.").toUtf8().data(), &stats) ; if(ret == 0) { - available = ((unsigned long long)stats.f_bavail) * - ((unsigned long long)stats.f_bsize) ; - return available; - } else { - return -1; - } + available = ((unsigned long long)stats.f_bavail) * + ((unsigned long long)stats.f_bsize) ; + return available; + } else { + return -1; + } #else - return -1; + typedef BOOL (WINAPI *GetDiskFreeSpaceEx_t)(LPCTSTR, + PULARGE_INTEGER, + PULARGE_INTEGER, + PULARGE_INTEGER); + GetDiskFreeSpaceEx_t + pGetDiskFreeSpaceEx = (GetDiskFreeSpaceEx_t)::GetProcAddress + ( + ::GetModuleHandle(_T("kernel32.dll")), + "GetDiskFreeSpaceExW" + ); + if ( pGetDiskFreeSpaceEx ) + { + ULARGE_INTEGER bytesFree, bytesTotal; + unsigned long long *ret; + if (pGetDiskFreeSpaceEx((LPCTSTR)path.ucs2(), &bytesFree, &bytesTotal, NULL)) { + tmp = (unsigned long long*)&bytesFree + return ret; + } else { + return -1; + } + } else { + return -1; + } #endif }