Dmitry Timoshkov : wininet: Return proper cache path from GetUrlCacheConfigInfo.

Alexandre Julliard julliard at winehq.org
Fri Aug 23 09:31:23 CDT 2019


Module: wine
Branch: stable
Commit: a8aafa4c274aebc06530f090c6ff77ea8e2e3ed1
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=a8aafa4c274aebc06530f090c6ff77ea8e2e3ed1

Author: Dmitry Timoshkov <dmitry at baikal.ru>
Date:   Wed Jan 23 14:51:26 2019 +0800

wininet: Return proper cache path from GetUrlCacheConfigInfo.

Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit 0cdca521e9bdf9838cd789cf3ef225a95cdaf6d5)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>

---

 dlls/wininet/tests/urlcache.c |  2 -
 dlls/wininet/urlcache.c       | 89 +++++++++++++++++++++++++++++++++++++++----
 2 files changed, 81 insertions(+), 10 deletions(-)

diff --git a/dlls/wininet/tests/urlcache.c b/dlls/wininet/tests/urlcache.c
index acd4ff2..c5e72ae 100644
--- a/dlls/wininet/tests/urlcache.c
+++ b/dlls/wininet/tests/urlcache.c
@@ -1184,10 +1184,8 @@ static void test_GetUrlCacheConfigInfo(void)
 
         SetLastError(0xdeadbeef);
         ret = GetUrlCacheConfigInfoA(td[i].info, NULL, td[i].flags);
-todo_wine
         ok(ret == td[i].ret, "%d: expected %d, got %d\n", i, td[i].ret, ret);
         if (!ret)
-todo_wine
             ok(GetLastError() == td[i].error, "%d: expected %u, got %u\n", i, td[i].error, GetLastError());
         else
         {
diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c
index f26fa34..4d422c9 100644
--- a/dlls/wininet/urlcache.c
+++ b/dlls/wininet/urlcache.c
@@ -23,6 +23,7 @@
  */
 
 #define NONAMELESSUNION
+#define NONAMELESSSTRUCT
 
 #include "ws2tcpip.h"
 
@@ -3764,21 +3765,93 @@ BOOL WINAPI SetUrlCacheEntryGroupW(LPCWSTR lpszUrlName, DWORD dwFlags,
 /***********************************************************************
  *           GetUrlCacheConfigInfoW (WININET.@)
  */
-BOOL WINAPI GetUrlCacheConfigInfoW(LPINTERNET_CACHE_CONFIG_INFOW CacheInfo, LPDWORD size, DWORD bitmask)
+BOOL WINAPI GetUrlCacheConfigInfoW(LPINTERNET_CACHE_CONFIG_INFOW info, LPDWORD size, DWORD flags)
 {
-    FIXME("(%p, %p, %x)\n", CacheInfo, size, bitmask);
-    INTERNET_SetLastError(ERROR_INVALID_PARAMETER);
-    return FALSE;
+    cache_container *container;
+
+    FIXME("(%p, %p, %x): semi-stub\n", info, size, flags);
+
+    if (!info)
+    {
+        INTERNET_SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
+    info->dwContainer = 0;
+    info->dwQuota = 0x3e800; /* FIXME */
+    info->dwReserved4 = 0;
+    info->fPerUser = TRUE;
+    info->dwSyncMode = 0;
+    info->dwNumCachePaths = 1;
+    info->dwNormalUsage = 0;
+    info->dwExemptUsage = 0;
+
+    info->u.s.CachePath[0] = 0;
+    info->u.s.dwCacheSize = 0x3e800; /* FIXME */
+
+    LIST_FOR_EACH_ENTRY(container, &UrlContainers, cache_container, entry)
+    {
+        switch (flags & (CACHE_CONFIG_CONTENT_PATHS_FC | CACHE_CONFIG_COOKIES_PATHS_FC | CACHE_CONFIG_HISTORY_PATHS_FC))
+        {
+        case 0:
+        case CACHE_CONFIG_CONTENT_PATHS_FC:
+            if (container->default_entry_type == NORMAL_CACHE_ENTRY)
+                lstrcpynW(info->u.s.CachePath, container->path, MAX_PATH);
+            break;
+
+        case CACHE_CONFIG_COOKIES_PATHS_FC:
+            if (container->default_entry_type == COOKIE_CACHE_ENTRY)
+                lstrcpynW(info->u.s.CachePath, container->path, MAX_PATH);
+            break;
+
+        case CACHE_CONFIG_HISTORY_PATHS_FC:
+            if (container->default_entry_type == URLHISTORY_CACHE_ENTRY)
+                lstrcpynW(info->u.s.CachePath, container->path, MAX_PATH);
+            break;
+
+        default:
+            FIXME("flags %08x not handled\n", flags);
+            break;
+        }
+    }
+
+    TRACE("CachePath %s\n", debugstr_w(info->u.s.CachePath));
+
+    return TRUE;
 }
 
 /***********************************************************************
  *           GetUrlCacheConfigInfoA (WININET.@)
  */
-BOOL WINAPI GetUrlCacheConfigInfoA(LPINTERNET_CACHE_CONFIG_INFOA CacheInfo, LPDWORD size, DWORD bitmask)
+BOOL WINAPI GetUrlCacheConfigInfoA(LPINTERNET_CACHE_CONFIG_INFOA info, LPDWORD size, DWORD flags)
 {
-    FIXME("(%p, %p, %x)\n", CacheInfo, size, bitmask);
-    INTERNET_SetLastError(ERROR_INVALID_PARAMETER);
-    return FALSE;
+    INTERNET_CACHE_CONFIG_INFOW infoW;
+
+    TRACE("(%p, %p, %x)\n", info, size, flags);
+
+    if (!info)
+    {
+        INTERNET_SetLastError(ERROR_INVALID_PARAMETER);
+        return FALSE;
+    }
+
+    infoW.dwStructSize = sizeof(infoW);
+    if (!GetUrlCacheConfigInfoW(&infoW, size, flags))
+        return FALSE;
+
+    info->dwContainer = infoW.dwContainer;
+    info->dwQuota = infoW.dwQuota;
+    info->dwReserved4 = infoW.dwReserved4;
+    info->fPerUser = infoW.fPerUser;
+    info->dwSyncMode = infoW.dwSyncMode;
+    info->dwNumCachePaths = infoW.dwNumCachePaths;
+    info->dwNormalUsage = infoW.dwNormalUsage;
+    info->dwExemptUsage = infoW.dwExemptUsage;
+
+    info->u.s.dwCacheSize = infoW.u.s.dwCacheSize;
+    WideCharToMultiByte(CP_ACP, 0, infoW.u.s.CachePath, -1, info->u.s.CachePath, MAX_PATH, NULL, NULL);
+
+    return TRUE;
 }
 
 BOOL WINAPI GetUrlCacheGroupAttributeA( GROUPID gid, DWORD dwFlags, DWORD dwAttributes,




More information about the wine-cvs mailing list