Thomas Mullaly : urlmon: Implemented support for determining what port value to use in IUriBuilder.

Alexandre Julliard julliard at winehq.org
Tue Sep 28 11:13:31 CDT 2010


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

Author: Thomas Mullaly <thomas.mullaly at gmail.com>
Date:   Tue Sep 21 22:25:24 2010 -0400

urlmon: Implemented support for determining what port value to use in IUriBuilder.

---

 dlls/urlmon/uri.c |   21 ++++++++++++++++++++-
 1 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index 070ec70..44e37b1 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -160,9 +160,10 @@ typedef struct {
     BOOL            has_ipv6;
     ipv6_address    ipv6_address;
 
+    BOOL            has_port;
     const WCHAR     *port;
     DWORD           port_len;
-    USHORT          port_value;
+    DWORD           port_value;
 
     const WCHAR     *path;
     DWORD           path_len;
@@ -1435,6 +1436,7 @@ static BOOL parse_port(const WCHAR **ptr, parse_data *data, DWORD flags) {
         ++(*ptr);
     }
 
+    data->has_port = TRUE;
     data->port_value = port;
     data->port_len = *ptr - data->port;
 
@@ -3696,6 +3698,21 @@ static HRESULT validate_host(const UriBuilder *builder, parse_data *data, DWORD
     return S_OK;
 }
 
+static void setup_port(const UriBuilder *builder, parse_data *data, DWORD flags) {
+    if(builder->modified_props & Uri_HAS_PORT) {
+        if(builder->has_port) {
+            data->has_port = TRUE;
+            data->port_value = builder->port;
+        }
+    } else if(builder->uri && builder->uri->has_port) {
+        data->has_port = TRUE;
+        data->port_value = builder->uri->port;
+    }
+
+    if(data->has_port)
+        TRACE("(%p %p %x): Using %u as port for IUri.\n", builder, data, flags, data->port_value);
+}
+
 static HRESULT validate_components(const UriBuilder *builder, parse_data *data, DWORD flags) {
     HRESULT hr;
 
@@ -3728,6 +3745,8 @@ static HRESULT validate_components(const UriBuilder *builder, parse_data *data,
     /* The URI is opaque if it doesn't have an authority component. */
     data->is_opaque = !data->username && !data->password && !data->host;
 
+    setup_port(builder, data, flags);
+
     return E_NOTIMPL;
 }
 




More information about the wine-cvs mailing list