Module: wine Branch: master Commit: 17880993217ab52d1771bcc5af717186ec0a77fd URL: http://source.winehq.org/git/wine.git/?a=commit;h=17880993217ab52d1771bcc5af...
Author: Thomas Mullaly thomas.mullaly@gmail.com Date: Thu Dec 2 20:58:11 2010 -0500
urlmon: Implemented PARSE_URL_FROM_PATH for CoInternetParseIUri.
---
dlls/urlmon/tests/uri.c | 10 +++++++++- dlls/urlmon/uri.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletions(-)
diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c index 01a0f5a..b135c10 100644 --- a/dlls/urlmon/tests/uri.c +++ b/dlls/urlmon/tests/uri.c @@ -5948,7 +5948,15 @@ static const uri_parse_test uri_parse_tests[] = { {"file:///c:/t<|>est.mp3",0,PARSE_PATH_FROM_URL,0,"c:\t<|>est.mp3",S_OK,FALSE}, {"file:///c:/te%XX t/",0,PARSE_PATH_FROM_URL,0,"c:\te%XX t\",S_OK,FALSE}, {"file://server/test",0,PARSE_PATH_FROM_URL,0,"\\server\test",S_OK,FALSE}, - {"http://google.com/%22,0,PARSE_PATH_FROM_URL,0,%22%22,E_INVALIDARG,FALSE%7D + {"http://google.com/%22,0,PARSE_PATH_FROM_URL,0,%22%22,E_INVALIDARG,FALSE%7D, + + /* PARSE_URL_FROM_PATH tests. */ + /* This function almost seems to useless (just returns the absolute uri). */ + {"test.com",Uri_CREATE_ALLOW_RELATIVE,PARSE_URL_FROM_PATH,0,"test.com",S_OK,FALSE}, + {"/test/test",Uri_CREATE_ALLOW_RELATIVE,PARSE_URL_FROM_PATH,0,"/test/test",S_OK,FALSE}, + {"file://c:\test\test",Uri_CREATE_FILE_USE_DOS_PATH,PARSE_URL_FROM_PATH,0,"file://c:\test\test",S_OK,FALSE}, + {"file:c:/test",0,PARSE_URL_FROM_PATH,0,"",S_OK,FALSE}, + {"http:google.com/",0,PARSE_URL_FROM_PATH,0,"",S_OK,FALSE} };
static inline LPWSTR a2w(LPCSTR str) { diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c index b09a165..e409ebc 100644 --- a/dlls/urlmon/uri.c +++ b/dlls/urlmon/uri.c @@ -6356,6 +6356,35 @@ static HRESULT parse_path_from_url(const Uri *uri, LPWSTR output, DWORD output_l return S_OK; }
+static HRESULT parse_url_from_path(IUri *uri, LPWSTR output, DWORD output_len, + DWORD *result_len) +{ + HRESULT hr; + BSTR received; + DWORD len = 0; + + hr = IUri_GetPropertyLength(uri, Uri_PROPERTY_ABSOLUTE_URI, &len, 0); + if(FAILED(hr)) { + *result_len = 0; + return hr; + } + + *result_len = len; + if(len+1 > output_len) + return STRSAFE_E_INSUFFICIENT_BUFFER; + + hr = IUri_GetAbsoluteUri(uri, &received); + if(FAILED(hr)) { + *result_len = 0; + return hr; + } + + memcpy(output, received, (len+1)*sizeof(WCHAR)); + SysFreeString(received); + + return S_OK; +} + /*********************************************************************** * CoInternetParseIUri (urlmon.@) */ @@ -6417,6 +6446,9 @@ HRESULT WINAPI CoInternetParseIUri(IUri *pIUri, PARSEACTION ParseAction, DWORD d } hr = parse_path_from_url(uri, pwzResult, cchResult, pcchResult); break; + case PARSE_URL_FROM_PATH: + hr = parse_url_from_path(pIUri, pwzResult, cchResult, pcchResult); + break; case PARSE_SECURITY_URL: case PARSE_MIME: case PARSE_SERVER: