Module: wine Branch: master Commit: 359ed3382442db00c2bf55dc958629d812e3e6be URL: http://source.winehq.org/git/wine.git/?a=commit;h=359ed3382442db00c2bf55dc95...
Author: Piotr Caban piotr@codeweavers.com Date: Tue Sep 18 14:43:23 2012 +0200
wininet: Delete file when cache entry is deleted.
---
dlls/wininet/tests/urlcache.c | 5 ----- dlls/wininet/urlcache.c | 19 +++++++++++++------ 2 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/dlls/wininet/tests/urlcache.c b/dlls/wininet/tests/urlcache.c index 12827e9..4238c60 100644 --- a/dlls/wininet/tests/urlcache.c +++ b/dlls/wininet/tests/urlcache.c @@ -481,7 +481,6 @@ static void test_urlcacheA(void)
SetLastError(0xdeadbeef); ret = DeleteFile(filenameA); - todo_wine ok(!ret && GetLastError() == ERROR_FILE_NOT_FOUND, "local file should no longer exist\n");
/* Creating two entries with the same URL */ @@ -537,7 +536,6 @@ static void test_urlcacheA(void) { ret = pDeleteUrlCacheEntryA(TEST_URL); ok(ret, "DeleteUrlCacheEntryA failed with error %d\n", GetLastError()); - todo_wine check_file_not_exists(filenameA); todo_wine check_file_not_exists(filenameA1); @@ -595,7 +593,6 @@ static void test_urlcacheA(void) /* By unlocking the already-deleted cache entry, the file associated * with it is deleted.. */ - todo_wine check_file_not_exists(filenameA); /* (just in case, delete file) */ DeleteFileA(filenameA); @@ -692,7 +689,6 @@ static void test_urlcacheA(void) ret = pDeleteUrlCacheEntryA(TEST_URL); ok(ret, "DeleteUrlCacheEntryA failed with error %d\n", GetLastError()); /* When explicitly deleting the cache entry, the file is also deleted */ - todo_wine check_file_not_exists(filenameA); } /* Test once again, setting the exempt delta via SetUrlCacheEntryInfo */ @@ -760,7 +756,6 @@ static void test_urlcacheA(void) { ret = pDeleteUrlCacheEntryA(TEST_URL); ok(ret, "DeleteUrlCacheEntryA failed with error %d\n", GetLastError()); - todo_wine check_file_not_exists(filenameA); } } diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c index 0536093..1b62fda 100644 --- a/dlls/wininet/urlcache.c +++ b/dlls/wininet/urlcache.c @@ -2175,11 +2175,13 @@ BOOL WINAPI RetrieveUrlCacheEntryFileW( return TRUE; }
-static BOOL DeleteUrlCacheEntryInternal(LPURLCACHE_HEADER pHeader, - struct _HASH_ENTRY *pHashEntry) +static BOOL DeleteUrlCacheEntryInternal(const URLCACHECONTAINER * pContainer, + LPURLCACHE_HEADER pHeader, struct _HASH_ENTRY *pHashEntry) { CACHEFILE_ENTRY * pEntry; URL_CACHEFILE_ENTRY * pUrlEntry; + WCHAR path[MAX_PATH]; + LONG path_size = sizeof(path);
pEntry = (CACHEFILE_ENTRY *)((LPBYTE)pHeader + pHashEntry->dwOffsetEntry); if (pEntry->dwSignature != URL_SIGNATURE) @@ -2220,8 +2222,13 @@ static BOOL DeleteUrlCacheEntryInternal(LPURLCACHE_HEADER pHeader, pHeader->CacheUsage.QuadPart = 0; }
- URLCache_DeleteEntry(pHeader, pEntry); + if (pUrlEntry->dwOffsetLocalName && URLCache_LocalFileNameToPathW(pContainer, pHeader, + (LPCSTR)pUrlEntry+pUrlEntry->dwOffsetLocalName, pUrlEntry->CacheDir, path, &path_size)) + { + DeleteFileW(path); + }
+ URLCache_DeleteEntry(pHeader, pEntry); URLCache_DeleteEntryFromHash(pHashEntry); return TRUE; } @@ -2297,7 +2304,7 @@ BOOL WINAPI UnlockUrlCacheEntryFileA( { URLCache_HashEntrySetFlags(pHashEntry, HASHTABLE_URL); if (pUrlEntry->CacheEntryType & PENDING_DELETE_CACHE_ENTRY) - DeleteUrlCacheEntryInternal(pHeader, pHashEntry); + DeleteUrlCacheEntryInternal(pContainer, pHeader, pHashEntry); }
URLCacheContainer_UnlockIndex(pContainer, pHeader); @@ -3241,7 +3248,7 @@ BOOL WINAPI DeleteUrlCacheEntryA(LPCSTR lpszUrlName) return FALSE; }
- ret = DeleteUrlCacheEntryInternal(pHeader, pHashEntry); + ret = DeleteUrlCacheEntryInternal(pContainer, pHeader, pHashEntry);
URLCacheContainer_UnlockIndex(pContainer, pHeader);
@@ -3301,7 +3308,7 @@ BOOL WINAPI DeleteUrlCacheEntryW(LPCWSTR lpszUrlName) return FALSE; }
- ret = DeleteUrlCacheEntryInternal(pHeader, pHashEntry); + ret = DeleteUrlCacheEntryInternal(pContainer, pHeader, pHashEntry);
URLCacheContainer_UnlockIndex(pContainer, pHeader); heap_free(urlA);