Thomas Mullaly : urlmon: Implemented PARSE_DOMAIN for CoInternetParseIUri.

Alexandre Julliard julliard at winehq.org
Fri Dec 3 09:31:38 CST 2010


Module: wine
Branch: master
Commit: 4a9d2d43fe2534c4141599f5f11ae66b2c2db32d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4a9d2d43fe2534c4141599f5f11ae66b2c2db32d

Author: Thomas Mullaly <thomas.mullaly at gmail.com>
Date:   Thu Dec  2 21:45:22 2010 -0500

urlmon: Implemented PARSE_DOMAIN for CoInternetParseIUri.

---

 dlls/urlmon/tests/uri.c |    8 +++++++-
 dlls/urlmon/uri.c       |   31 +++++++++++++++++++++++++++++++
 2 files changed, 38 insertions(+), 1 deletions(-)

diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c
index 057850a..1a02f8a 100644
--- a/dlls/urlmon/tests/uri.c
+++ b/dlls/urlmon/tests/uri.c
@@ -5966,7 +5966,13 @@ static const uri_parse_test uri_parse_tests[] = {
     {"http://google.uk.com/",0,PARSE_SITE,0,"google.uk.com",S_OK,FALSE},
     {"http://google.com.com/",0,PARSE_SITE,0,"google.com.com",S_OK,FALSE},
     {"google.com",Uri_CREATE_ALLOW_RELATIVE,PARSE_SITE,0,"",S_OK,FALSE},
-    {"file://server/test",0,PARSE_SITE,0,"server",S_OK,FALSE}
+    {"file://server/test",0,PARSE_SITE,0,"server",S_OK,FALSE},
+
+    /* PARSE_DOMAIN 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}
 };
 
 static inline LPWSTR a2w(LPCSTR str) {
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index 54f7118..8698266 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -6442,6 +6442,34 @@ static HRESULT parse_site(IUri *uri, LPWSTR output, DWORD output_len, DWORD *res
     return S_OK;
 }
 
+static HRESULT parse_domain(IUri *uri, LPWSTR output, DWORD output_len, DWORD *result_len)
+{
+    HRESULT hr;
+    DWORD len;
+    BSTR received;
+
+    hr = IUri_GetPropertyLength(uri, Uri_PROPERTY_DOMAIN, &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_GetDomain(uri, &received);
+    if(FAILED(hr)) {
+        *result_len = 0;
+        return hr;
+    }
+
+    memcpy(output, received, (len+1)*sizeof(WCHAR));
+    SysFreeString(received);
+
+    return S_OK;
+}
+
 /***********************************************************************
  *           CoInternetParseIUri (urlmon.@)
  */
@@ -6512,6 +6540,9 @@ HRESULT WINAPI CoInternetParseIUri(IUri *pIUri, PARSEACTION ParseAction, DWORD d
     case PARSE_SITE:
         hr = parse_site(pIUri, pwzResult, cchResult, pcchResult);
         break;
+    case PARSE_DOMAIN:
+        hr = parse_domain(pIUri, pwzResult, cchResult, pcchResult);
+        break;
     case PARSE_SECURITY_URL:
     case PARSE_MIME:
     case PARSE_SERVER:




More information about the wine-cvs mailing list