James Hawkins : urlmon: Implement URLDownloadToCacheFileW.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Jul 12 14:21:10 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: e2bf4ff16449d4c90d2a9fb662dc0f506d7bcbbc
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=e2bf4ff16449d4c90d2a9fb662dc0f506d7bcbbc
Author: James Hawkins <truiken at gmail.com>
Date: Tue Jul 11 13:27:59 2006 -0700
urlmon: Implement URLDownloadToCacheFileW.
---
dlls/urlmon/umon.c | 43 ++++++++++++++++++++++++++++++++++++++++---
1 files changed, 40 insertions(+), 3 deletions(-)
diff --git a/dlls/urlmon/umon.c b/dlls/urlmon/umon.c
index 88304ca..b1ca78e 100644
--- a/dlls/urlmon/umon.c
+++ b/dlls/urlmon/umon.c
@@ -1611,9 +1611,46 @@ HRESULT WINAPI URLDownloadToCacheFileA(L
HRESULT WINAPI URLDownloadToCacheFileW(LPUNKNOWN lpUnkCaller, LPCWSTR szURL, LPWSTR szFileName,
DWORD dwBufLength, DWORD dwReserved, LPBINDSTATUSCALLBACK pBSC)
{
- FIXME("(%p %s %p %ld %ld %p)\n", lpUnkCaller, debugstr_w(szURL), szFileName,
- dwBufLength, dwReserved, pBSC);
- return E_NOTIMPL;
+ WCHAR cache_path[MAX_PATH + 1];
+ FILETIME expire, modified;
+ HRESULT hr;
+ LPWSTR ext;
+
+ static const WCHAR header[] = {
+ 'H','T','T','P','/','1','.','0',' ','2','0','0',' ',
+ 'O','K','\\','r','\\','n','\\','r','\\','n',0
+ };
+
+ TRACE("(%p, %s, %p, %ld, %ld, %p)\n", lpUnkCaller, debugstr_w(szURL),
+ szFileName, dwBufLength, dwReserved, pBSC);
+
+ if (!szURL || !szFileName)
+ return E_INVALIDARG;
+
+ ext = PathFindExtensionW(szURL);
+
+ if (!CreateUrlCacheEntryW(szURL, 0, ext, cache_path, 0))
+ return E_FAIL;
+
+ hr = URLDownloadToFileW(lpUnkCaller, szURL, cache_path, 0, pBSC);
+ if (FAILED(hr))
+ return hr;
+
+ expire.dwHighDateTime = 0;
+ expire.dwLowDateTime = 0;
+ modified.dwHighDateTime = 0;
+ modified.dwLowDateTime = 0;
+
+ if (!CommitUrlCacheEntryW(szURL, cache_path, expire, modified, NORMAL_CACHE_ENTRY,
+ (LPWSTR)header, sizeof(header), NULL, NULL))
+ return E_FAIL;
+
+ if (lstrlenW(cache_path) > dwBufLength)
+ return E_OUTOFMEMORY;
+
+ lstrcpyW(szFileName, cache_path);
+
+ return S_OK;
}
/***********************************************************************
More information about the wine-cvs
mailing list