Module: wine Branch: refs/heads/master Commit: 5674260b6dd64c1dc6e58697a682757e3902a66e URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=5674260b6dd64c1dc6e58697...
Author: Jacek Caban jacek@codeweavers.com Date: Sat Jul 29 14:53:22 2006 +0200
urlmon: Use CoInternetParseUrl in URLMonikerImpl_Construct.
---
dlls/urlmon/umon.c | 39 +++++++++++++++------------------------ 1 files changed, 15 insertions(+), 24 deletions(-)
diff --git a/dlls/urlmon/umon.c b/dlls/urlmon/umon.c index c81b3a3..715db8d 100644 --- a/dlls/urlmon/umon.c +++ b/dlls/urlmon/umon.c @@ -1060,43 +1060,34 @@ static const IMonikerVtbl VT_URLMonikerI static HRESULT URLMonikerImpl_Construct(URLMonikerImpl* This, LPCOLESTR lpszLeftURLName, LPCOLESTR lpszURLName) { HRESULT hres; - DWORD sizeStr = INTERNET_MAX_URL_LENGTH; + DWORD sizeStr = 0;
TRACE("(%p,%s,%s)\n",This,debugstr_w(lpszLeftURLName),debugstr_w(lpszURLName));
This->lpvtbl = &VT_URLMonikerImpl; This->ref = 0;
- sizeStr = lstrlenW(lpszURLName)+1; - if(lpszLeftURLName) - sizeStr += strlenW(lpszLeftURLName)+32; - - This->URLName = HeapAlloc(GetProcessHeap(), 0, sizeStr*sizeof(WCHAR)); + This->URLName = HeapAlloc(GetProcessHeap(), 0, INTERNET_MAX_URL_LENGTH*sizeof(WCHAR));
- if(lpszLeftURLName) { + if(lpszLeftURLName) hres = CoInternetCombineUrl(lpszLeftURLName, lpszURLName, URL_FILE_USE_PATHURL, - This->URLName, sizeStr, &sizeStr, 0); - if(FAILED(hres)) { - HeapFree(GetProcessHeap(), 0, This->URLName); - return hres; - } - }else { - /* FIXME: - * We probably should use CoInternetParseUrl or something similar here. - */ - - static const WCHAR wszFile[] = {'f','i','l','e',':','/','/',}; + This->URLName, INTERNET_MAX_URL_LENGTH, &sizeStr, 0); + else + hres = CoInternetParseUrl(lpszURLName, PARSE_CANONICALIZE, URL_FILE_USE_PATHURL, + This->URLName, INTERNET_MAX_URL_LENGTH, &sizeStr, 0);
- /* file protocol is a special case */ - if(sizeStr > sizeof(wszFile)/sizeof(WCHAR) - && !memcmp(lpszURLName, wszFile, sizeof(wszFile))) - UrlCanonicalizeW(lpszURLName, This->URLName, &sizeStr, URL_FILE_USE_PATHURL); - else - strcpyW(This->URLName,lpszURLName); + if(FAILED(hres)) { + HeapFree(GetProcessHeap(), 0, This->URLName); + return hres; }
URLMON_LockModule();
+ if(sizeStr != INTERNET_MAX_URL_LENGTH) + This->URLName = HeapReAlloc(GetProcessHeap(), 0, This->URLName, (sizeStr+1)*sizeof(WCHAR)); + + TRACE("URLName = %s\n", debugstr_w(This->URLName)); + return S_OK; }