Thomas Mullaly : urlmon: Implemented IUriBuilder_{Get/Set}Query.
Alexandre Julliard
julliard at winehq.org
Tue Sep 7 11:22:55 CDT 2010
Module: wine
Branch: master
Commit: b27e9297b6058e95adb6b1428fb3a60fee43f01f
URL: http://source.winehq.org/git/wine.git/?a=commit;h=b27e9297b6058e95adb6b1428fb3a60fee43f01f
Author: Thomas Mullaly <thomas.mullaly at gmail.com>
Date: Mon Sep 6 16:43:37 2010 -0400
urlmon: Implemented IUriBuilder_{Get/Set}Query.
---
dlls/urlmon/tests/uri.c | 35 ++++++++++++++++++++++++++++++++++-
dlls/urlmon/uri.c | 27 ++++++++++++---------------
2 files changed, 46 insertions(+), 16 deletions(-)
diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c
index 6756d99..a8b4952 100644
--- a/dlls/urlmon/tests/uri.c
+++ b/dlls/urlmon/tests/uri.c
@@ -4280,7 +4280,7 @@ static const uri_builder_test uri_builder_tests[] = {
{
{TRUE,"#fragment",NULL,Uri_PROPERTY_FRAGMENT,S_OK,FALSE},
{TRUE,"password",NULL,Uri_PROPERTY_PASSWORD,S_OK,FALSE},
- {TRUE,"?query=x",NULL,Uri_PROPERTY_QUERY,S_OK,TRUE},
+ {TRUE,"?query=x",NULL,Uri_PROPERTY_QUERY,S_OK,FALSE},
{TRUE,"username",NULL,Uri_PROPERTY_USER_NAME,S_OK,TRUE}
},
{FALSE},
@@ -4671,6 +4671,39 @@ static const uri_builder_test uri_builder_tests[] = {
{URL_SCHEME_HTTP,S_OK},
{URLZONE_INVALID,E_NOTIMPL}
}
+ },
+ { "http://google.com/",0,S_OK,FALSE,
+ {
+ {TRUE,"test","?test",Uri_PROPERTY_QUERY,S_OK,FALSE},
+ },
+
+ {FALSE},
+ 0,S_OK,TRUE,
+ 0,S_OK,TRUE,
+ 0,0,0,S_OK,TRUE,
+ {
+ {"http://google.com/?test",S_OK},
+ {"google.com",S_OK},
+ {"http://google.com/?test",S_OK},
+ {"google.com",S_OK},
+ {"",S_FALSE},
+ {"",S_FALSE},
+ {"google.com",S_OK},
+ {"",S_FALSE},
+ {"/",S_OK},
+ {"/?test",S_OK},
+ {"?test",S_OK},
+ {"http://google.com/?test",S_OK},
+ {"http",S_OK},
+ {"",S_FALSE},
+ {"",S_FALSE}
+ },
+ {
+ {Uri_HOST_DNS,S_OK},
+ {80,S_OK},
+ {URL_SCHEME_HTTP,S_OK},
+ {URLZONE_INVALID,E_NOTIMPL}
+ }
}
};
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index dbc1747..ce14446 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -94,6 +94,9 @@ typedef struct {
BOOL has_port;
DWORD port;
+
+ WCHAR *query;
+ DWORD query_len;
} UriBuilder;
typedef struct {
@@ -4324,6 +4327,7 @@ static ULONG WINAPI UriBuilder_Release(IUriBuilder *iface)
heap_free(This->host);
heap_free(This->password);
heap_free(This->path);
+ heap_free(This->query);
heap_free(This);
}
@@ -4519,19 +4523,11 @@ static HRESULT WINAPI UriBuilder_GetQuery(IUriBuilder *iface, DWORD *pcchQuery,
UriBuilder *This = URIBUILDER_THIS(iface);
TRACE("(%p)->(%p %p)\n", This, pcchQuery, ppwzQuery);
- if(!pcchQuery) {
- if(ppwzQuery)
- *ppwzQuery = NULL;
- return E_POINTER;
- }
-
- if(!ppwzQuery) {
- *pcchQuery = 0;
- return E_POINTER;
- }
-
- FIXME("(%p)->(%p %p)\n", This, pcchQuery, ppwzQuery);
- return E_NOTIMPL;
+ if(!This->uri || This->uri->query_start == -1 || This->modified_props & Uri_HAS_QUERY)
+ return get_builder_component(&This->query, &This->query_len, NULL, 0, ppwzQuery, pcchQuery);
+ else
+ return get_builder_component(&This->query, &This->query_len, This->uri->canon_uri+This->uri->query_start,
+ This->uri->query_len, ppwzQuery, pcchQuery);
}
static HRESULT WINAPI UriBuilder_GetSchemeName(IUriBuilder *iface, DWORD *pcchSchemeName, LPCWSTR *ppwzSchemeName)
@@ -4620,8 +4616,9 @@ static HRESULT WINAPI UriBuilder_SetPort(IUriBuilder *iface, BOOL fHasPort, DWOR
static HRESULT WINAPI UriBuilder_SetQuery(IUriBuilder *iface, LPCWSTR pwzNewValue)
{
UriBuilder *This = URIBUILDER_THIS(iface);
- FIXME("(%p)->(%s)\n", This, debugstr_w(pwzNewValue));
- return E_NOTIMPL;
+ TRACE("(%p)->(%s)\n", This, debugstr_w(pwzNewValue));
+ return set_builder_component(&This->query, &This->query_len, pwzNewValue, '?',
+ &This->modified_props, Uri_HAS_QUERY);
}
static HRESULT WINAPI UriBuilder_SetSchemeName(IUriBuilder *iface, LPCWSTR pwzNewValue)
More information about the wine-cvs
mailing list