Module: wine Branch: master Commit: d448a2ad9b0bc4180be9052ad84c24e46d59a5ba URL: http://source.winehq.org/git/wine.git/?a=commit;h=d448a2ad9b0bc4180be9052ad8...
Author: Juan Lang juan.lang@gmail.com Date: Mon Oct 22 10:16:27 2007 -0700
wininet: Implement RetrieveUrlCacheEntryFileW.
---
dlls/wininet/urlcache.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 56 insertions(+), 1 deletions(-)
diff --git a/dlls/wininet/urlcache.c b/dlls/wininet/urlcache.c index e7131f3..e895cd7 100644 --- a/dlls/wininet/urlcache.c +++ b/dlls/wininet/urlcache.c @@ -1692,13 +1692,68 @@ BOOL WINAPI RetrieveUrlCacheEntryFileW( IN DWORD dwReserved ) { + LPURLCACHE_HEADER pHeader; + struct _HASH_ENTRY * pHashEntry; + CACHEFILE_ENTRY * pEntry; + URL_CACHEFILE_ENTRY * pUrlEntry; + URLCACHECONTAINER * pContainer; + TRACE("(%s, %p, %p, 0x%08x)\n", debugstr_w(lpszUrlName), lpCacheEntryInfo, lpdwCacheEntryInfoBufferSize, dwReserved);
- return FALSE; + if (!URLCacheContainers_FindContainerW(lpszUrlName, &pContainer)) + return FALSE; + + if (!URLCacheContainer_OpenIndex(pContainer)) + return FALSE; + + if (!(pHeader = URLCacheContainer_LockIndex(pContainer))) + return FALSE; + + if (!URLCache_FindHashW(pHeader, lpszUrlName, &pHashEntry)) + { + URLCacheContainer_UnlockIndex(pContainer, pHeader); + TRACE("entry %s not found!\n", debugstr_w(lpszUrlName)); + SetLastError(ERROR_FILE_NOT_FOUND); + return FALSE; + } + + pEntry = (CACHEFILE_ENTRY *)((LPBYTE)pHeader + pHashEntry->dwOffsetEntry); + if (pEntry->dwSignature != URL_SIGNATURE) + { + URLCacheContainer_UnlockIndex(pContainer, pHeader); + FIXME("Trying to retrieve entry of unknown format %s\n", debugstr_an((LPSTR)&pEntry->dwSignature, sizeof(DWORD))); + SetLastError(ERROR_FILE_NOT_FOUND); + return FALSE; + } + + pUrlEntry = (URL_CACHEFILE_ENTRY *)pEntry; + TRACE("Found URL: %s\n", (LPSTR)pUrlEntry + pUrlEntry->dwOffsetUrl); + TRACE("Header info: %s\n", (LPBYTE)pUrlEntry + pUrlEntry->dwOffsetHeaderInfo); + + pUrlEntry->dwHitRate++; + pUrlEntry->dwUseCount++; + URLCache_HashEntrySetUse(pHashEntry, pUrlEntry->dwUseCount); + + if (!URLCache_CopyEntry( + pContainer, + pHeader, + (LPINTERNET_CACHE_ENTRY_INFOA)lpCacheEntryInfo, + lpdwCacheEntryInfoBufferSize, + pUrlEntry, + TRUE /* UNICODE */)) + { + URLCacheContainer_UnlockIndex(pContainer, pHeader); + return FALSE; + } + TRACE("Local File Name: %s\n", debugstr_w(lpCacheEntryInfo->lpszLocalFileName)); + + URLCacheContainer_UnlockIndex(pContainer, pHeader); + + return TRUE; }
/***********************************************************************