Juan Lang : wininet: Decrement file use count when deleting a cache entry.

Alexandre Julliard julliard at winehq.org
Tue Mar 8 11:03:51 CST 2011


Module: wine
Branch: master
Commit: 601b4fa589edb1c290432a1153c8b93f1978ce32
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=601b4fa589edb1c290432a1153c8b93f1978ce32

Author: Juan Lang <juan.lang at gmail.com>
Date:   Sun Mar  6 10:05:45 2011 -0800

wininet: Decrement file use count when deleting a cache entry.

---

 dlls/wininet/urlcache.c |   32 ++++++++++++++++++++++++++++++++
 1 files changed, 32 insertions(+), 0 deletions(-)

diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c
index de31ff6..ca7f880 100644
--- a/dlls/wininet/urlcache.c
+++ b/dlls/wininet/urlcache.c
@@ -2924,6 +2924,7 @@ BOOL WINAPI DeleteUrlCacheEntryA(LPCSTR lpszUrlName)
     LPURLCACHE_HEADER pHeader;
     struct _HASH_ENTRY * pHashEntry;
     CACHEFILE_ENTRY * pEntry;
+    const URL_CACHEFILE_ENTRY * pUrlEntry;
     DWORD error;
 
     TRACE("(%s)\n", debugstr_a(lpszUrlName));
@@ -2954,6 +2955,21 @@ BOOL WINAPI DeleteUrlCacheEntryA(LPCSTR lpszUrlName)
     }
 
     pEntry = (CACHEFILE_ENTRY *)((LPBYTE)pHeader + pHashEntry->dwOffsetEntry);
+    if (pEntry->dwSignature != URL_SIGNATURE)
+    {
+        URLCacheContainer_UnlockIndex(pContainer, pHeader);
+        FIXME("Trying to delete entry of unknown format %s\n",
+              debugstr_an((LPCSTR)&pEntry->dwSignature, sizeof(DWORD)));
+        SetLastError(ERROR_FILE_NOT_FOUND);
+        return FALSE;
+    }
+    pUrlEntry = (const URL_CACHEFILE_ENTRY *)pEntry;
+    if (pUrlEntry->CacheDir < pHeader->DirectoryCount)
+    {
+        if (pHeader->directory_data[pUrlEntry->CacheDir].dwNumFiles)
+            pHeader->directory_data[pUrlEntry->CacheDir].dwNumFiles--;
+    }
+
     URLCache_DeleteEntry(pHeader, pEntry);
 
     URLCache_DeleteEntryFromHash(pHashEntry);
@@ -2973,6 +2989,7 @@ BOOL WINAPI DeleteUrlCacheEntryW(LPCWSTR lpszUrlName)
     LPURLCACHE_HEADER pHeader;
     struct _HASH_ENTRY * pHashEntry;
     CACHEFILE_ENTRY * pEntry;
+    const URL_CACHEFILE_ENTRY * pUrlEntry;
     LPSTR urlA;
     DWORD error;
 
@@ -3017,6 +3034,21 @@ BOOL WINAPI DeleteUrlCacheEntryW(LPCWSTR lpszUrlName)
     }
 
     pEntry = (CACHEFILE_ENTRY *)((LPBYTE)pHeader + pHashEntry->dwOffsetEntry);
+    if (pEntry->dwSignature != URL_SIGNATURE)
+    {
+        URLCacheContainer_UnlockIndex(pContainer, pHeader);
+        FIXME("Trying to delete entry of unknown format %s\n",
+              debugstr_an((LPCSTR)&pEntry->dwSignature, sizeof(DWORD)));
+        SetLastError(ERROR_FILE_NOT_FOUND);
+        return FALSE;
+    }
+    pUrlEntry = (const URL_CACHEFILE_ENTRY *)pEntry;
+    if (pUrlEntry->CacheDir < pHeader->DirectoryCount)
+    {
+        if (pHeader->directory_data[pUrlEntry->CacheDir].dwNumFiles)
+            pHeader->directory_data[pUrlEntry->CacheDir].dwNumFiles--;
+    }
+
     URLCache_DeleteEntry(pHeader, pEntry);
 
     URLCache_DeleteEntryFromHash(pHashEntry);




More information about the wine-cvs mailing list