Module: wine Branch: master Commit: 601b4fa589edb1c290432a1153c8b93f1978ce32 URL: http://source.winehq.org/git/wine.git/?a=commit;h=601b4fa589edb1c290432a1153...
Author: Juan Lang juan.lang@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);