urlmon: Implemented IUriBuilder_{Get/Set}Query.

This commit is contained in:
Thomas Mullaly 2010-09-06 16:43:37 -04:00 committed by Alexandre Julliard
parent a4eee68818
commit b27e9297b6
2 changed files with 46 additions and 16 deletions

View File

@ -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}
}
}
};

View File

@ -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)