wininet: Implement RetrieveUrlCacheEntryFileW.
This commit is contained in:
parent
922dc7b627
commit
d448a2ad9b
@ -1692,13 +1692,68 @@ BOOL WINAPI RetrieveUrlCacheEntryFileW(
|
|||||||
IN DWORD dwReserved
|
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",
|
TRACE("(%s, %p, %p, 0x%08x)\n",
|
||||||
debugstr_w(lpszUrlName),
|
debugstr_w(lpszUrlName),
|
||||||
lpCacheEntryInfo,
|
lpCacheEntryInfo,
|
||||||
lpdwCacheEntryInfoBufferSize,
|
lpdwCacheEntryInfoBufferSize,
|
||||||
dwReserved);
|
dwReserved);
|
||||||
|
|
||||||
|
if (!URLCacheContainers_FindContainerW(lpszUrlName, &pContainer))
|
||||||
return FALSE;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
Loading…
x
Reference in New Issue
Block a user