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