Module: wine Branch: master Commit: 5ca321520415ddbd98e0edb88aaa4af17d9139fe URL: http://source.winehq.org/git/wine.git/?a=commit;h=5ca321520415ddbd98e0edb88a...
Author: Thomas Mullaly thomas.mullaly@gmail.com Date: Thu Dec 2 21:57:07 2010 -0500
urlmon: Implemented PARSE_ANCHOR and PARSE_LOCATION for CoInternetParseIUri.
---
dlls/urlmon/tests/uri.c | 8 +++++++- dlls/urlmon/uri.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletions(-)
diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c index 1a02f8a..775b4f6 100644 --- a/dlls/urlmon/tests/uri.c +++ b/dlls/urlmon/tests/uri.c @@ -5972,7 +5972,13 @@ static const uri_parse_test uri_parse_tests[] = { {"http://google.com.uk/%22,0,PARSE_DOMAIN,0,%22google.com.uk%22,S_OK,FALSE%7D, {"http://google.com.com/%22,0,PARSE_DOMAIN,0,%22com.com%22,S_OK,FALSE%7D, {"test/test",Uri_CREATE_ALLOW_RELATIVE,PARSE_DOMAIN,0,"",S_OK,FALSE}, - {"file://server/test",0,PARSE_DOMAIN,0,"",S_OK,FALSE} + {"file://server/test",0,PARSE_DOMAIN,0,"",S_OK,FALSE}, + + /* PARSE_LOCATION and PARSE_ANCHOR tests. */ + {"http://google.com/test#Test%22,0,PARSE_ANCHOR,0,%22#Test%22,S_OK,FALSE%7D, + {"http://google.com/test#Test%22,0,PARSE_LOCATION,0,%22#Test%22,S_OK,FALSE%7D, + {"test",Uri_CREATE_ALLOW_RELATIVE,PARSE_ANCHOR,0,"",S_OK,FALSE}, + {"test",Uri_CREATE_ALLOW_RELATIVE,PARSE_LOCATION,0,"",S_OK,FALSE} };
static inline LPWSTR a2w(LPCSTR str) { diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c index 9e1878c..a273358 100644 --- a/dlls/urlmon/uri.c +++ b/dlls/urlmon/uri.c @@ -6468,6 +6468,34 @@ static HRESULT parse_domain(IUri *uri, LPWSTR output, DWORD output_len, DWORD *r return S_OK; }
+static HRESULT parse_anchor(IUri *uri, LPWSTR output, DWORD output_len, DWORD *result_len) +{ + HRESULT hr; + DWORD len; + BSTR received; + + hr = IUri_GetPropertyLength(uri, Uri_PROPERTY_FRAGMENT, &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_GetFragment(uri, &received); + if(FAILED(hr)) { + *result_len = 0; + return hr; + } + + memcpy(output, received, (len+1)*sizeof(WCHAR)); + SysFreeString(received); + + return S_OK; +} + /*********************************************************************** * CoInternetParseIUri (urlmon.@) */ @@ -6541,6 +6569,10 @@ HRESULT WINAPI CoInternetParseIUri(IUri *pIUri, PARSEACTION ParseAction, DWORD d case PARSE_DOMAIN: hr = parse_domain(pIUri, pwzResult, cchResult, pcchResult); break; + case PARSE_LOCATION: + case PARSE_ANCHOR: + hr = parse_anchor(pIUri, pwzResult, cchResult, pcchResult); + break; case PARSE_SECURITY_URL: case PARSE_MIME: case PARSE_SERVER: