Thomas Mullaly : urlmon: Implemented PARSE_ANCHOR and PARSE_LOCATION for CoInternetParseIUri.
Alexandre Julliard
julliard at winehq.org
Sun Dec 5 12:10:07 CST 2010
Module: wine
Branch: master
Commit: 5ca321520415ddbd98e0edb88aaa4af17d9139fe
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5ca321520415ddbd98e0edb88aaa4af17d9139fe
Author: Thomas Mullaly <thomas.mullaly at 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/",0,PARSE_DOMAIN,0,"google.com.uk",S_OK,FALSE},
{"http://google.com.com/",0,PARSE_DOMAIN,0,"com.com",S_OK,FALSE},
{"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",0,PARSE_ANCHOR,0,"#Test",S_OK,FALSE},
+ {"http://google.com/test#Test",0,PARSE_LOCATION,0,"#Test",S_OK,FALSE},
+ {"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:
More information about the wine-cvs
mailing list