Module: wine Branch: master Commit: 7ddec087f04a6d5b285d36dbe2a81b8fc73eaa0b URL: http://source.winehq.org/git/wine.git/?a=commit;h=7ddec087f04a6d5b285d36dbe2...
Author: Hans Leidekker hans@codeweavers.com Date: Wed May 13 14:01:18 2009 +0200
wininet: Implement GetDiskInfoA.
---
dlls/wininet/tests/urlcache.c | 41 +++++++++++++++++++++++++++++++++++++++++ dlls/wininet/urlcache.c | 22 +++++++++++++++++++--- dlls/wininet/wininet.spec | 2 +- include/winineti.h | 1 + 4 files changed, 62 insertions(+), 4 deletions(-)
diff --git a/dlls/wininet/tests/urlcache.c b/dlls/wininet/tests/urlcache.c index d135976..62e4bd2 100644 --- a/dlls/wininet/tests/urlcache.c +++ b/dlls/wininet/tests/urlcache.c @@ -25,6 +25,7 @@ #include "windef.h" #include "winbase.h" #include "wininet.h" +#include "winineti.h"
#include "wine/test.h"
@@ -219,6 +220,45 @@ static void test_FindCloseUrlCache(void) ok(ERROR_INVALID_HANDLE == err, "expected %d, got %d\n", ERROR_INVALID_HANDLE, err); }
+static void test_GetDiskInfoA(void) +{ + BOOL ret; + DWORD error, cluster_size; + DWORDLONG free, total; + char path[MAX_PATH], *p; + + GetSystemDirectoryA(path, MAX_PATH); + if ((p = strchr(path, '\'))) *++p = 0; + + ret = GetDiskInfoA(path, &cluster_size, &free, &total); + ok(ret, "GetDiskInfoA failed %u\n", GetLastError()); + + ret = GetDiskInfoA(path, &cluster_size, &free, NULL); + ok(ret, "GetDiskInfoA failed %u\n", GetLastError()); + + ret = GetDiskInfoA(path, &cluster_size, NULL, NULL); + ok(ret, "GetDiskInfoA failed %u\n", GetLastError()); + + ret = GetDiskInfoA(path, NULL, NULL, NULL); + ok(ret, "GetDiskInfoA failed %u\n", GetLastError()); + + ret = GetDiskInfoA(path, NULL, NULL, NULL); + ok(ret, "GetDiskInfoA failed %u\n", GetLastError()); + + SetLastError(0xdeadbeef); + strcpy(p, "\non\existing\path"); + ret = GetDiskInfoA(path, NULL, NULL, NULL); + error = GetLastError(); + ok(!ret, "GetDiskInfoA succeeded\n"); + ok(error == ERROR_PATH_NOT_FOUND, "got %u expected ERROR_PATH_NOT_FOUND\n", error); + + SetLastError(0xdeadbeef); + ret = GetDiskInfoA(NULL, NULL, NULL, NULL); + error = GetLastError(); + ok(!ret, "GetDiskInfoA succeeded\n"); + ok(error == ERROR_INVALID_PARAMETER, "got %u expected ERROR_INVALID_PARAMETER\n", error); +} + START_TEST(urlcache) { HMODULE hdll; @@ -227,4 +267,5 @@ START_TEST(urlcache) pUnlockUrlCacheEntryFileA = (void*)GetProcAddress(hdll, "UnlockUrlCacheEntryFileA"); test_urlcacheA(); test_FindCloseUrlCache(); + test_GetDiskInfoA(); } diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c index 5e1541d..db5020c 100644 --- a/dlls/wininet/urlcache.c +++ b/dlls/wininet/urlcache.c @@ -3624,10 +3624,26 @@ BOOL WINAPI IsUrlCacheEntryExpiredW( LPCWSTR url, DWORD dwFlags, FILETIME* pftLa /*********************************************************************** * GetDiskInfoA (WININET.@) */ -DWORD WINAPI GetDiskInfoA(void *p0, void *p1, void *p2, void *p3) +BOOL WINAPI GetDiskInfoA(PCSTR path, PDWORD cluster_size, PDWORDLONG free, PDWORDLONG total) { - FIXME("(%p, %p, %p, %p)\n", p0, p1, p2, p3); - return 0; + BOOL ret; + ULARGE_INTEGER bytes_free, bytes_total; + + TRACE("(%s, %p, %p, %p)\n", debugstr_a(path), cluster_size, free, total); + + if (!path) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if ((ret = GetDiskFreeSpaceExA(path, NULL, &bytes_total, &bytes_free))) + { + if (cluster_size) *cluster_size = 1; + if (free) *free = bytes_free.QuadPart; + if (total) *total = bytes_total.QuadPart; + } + return ret; }
/*********************************************************************** diff --git a/dlls/wininet/wininet.spec b/dlls/wininet/wininet.spec index 61beaf4..9506b6c 100644 --- a/dlls/wininet/wininet.spec +++ b/dlls/wininet/wininet.spec @@ -1,5 +1,5 @@ 101 stub -noname DoConnectoidsExist -102 stdcall -noname GetDiskInfoA(ptr ptr ptr ptr) +102 stdcall -noname GetDiskInfoA(str ptr ptr ptr) 103 stub -noname PerformOperationOverUrlCacheA 104 stub -noname HttpCheckDavComplianceA 105 stub -noname HttpCheckDavComplianceW diff --git a/include/winineti.h b/include/winineti.h index 98cba3b..32951ff 100644 --- a/include/winineti.h +++ b/include/winineti.h @@ -90,6 +90,7 @@ extern "C" { #endif
DWORD WINAPI DeleteIE3Cache(HWND,HINSTANCE,LPSTR,int); +BOOL WINAPI GetDiskInfoA(PCSTR,PDWORD,PDWORDLONG,PDWORDLONG); BOOL WINAPI GetUrlCacheConfigInfoA(LPINTERNET_CACHE_CONFIG_INFOA,LPDWORD,DWORD); BOOL WINAPI GetUrlCacheConfigInfoW(LPINTERNET_CACHE_CONFIG_INFOW,LPDWORD,DWORD); #define GetUrlCacheConfigInfo WINELIB_NAME_AW(GetUrlCacheConfigInfo)