Commit 4a352bd7 authored by Thomas Mullaly's avatar Thomas Mullaly Committed by Alexandre Julliard

urlmon: Implemented IUriBuilder_{Get/Set}Path.

parent 0a4e8541
...@@ -4347,7 +4347,7 @@ static const uri_builder_test uri_builder_tests[] = { ...@@ -4347,7 +4347,7 @@ static const uri_builder_test uri_builder_tests[] = {
{ {
{TRUE,"http",NULL,Uri_PROPERTY_SCHEME_NAME,S_OK,TRUE}, {TRUE,"http",NULL,Uri_PROPERTY_SCHEME_NAME,S_OK,TRUE},
{TRUE,"::192.2.3.4",NULL,Uri_PROPERTY_HOST,S_OK,FALSE}, {TRUE,"::192.2.3.4",NULL,Uri_PROPERTY_HOST,S_OK,FALSE},
{TRUE,NULL,NULL,Uri_PROPERTY_PATH,S_OK,TRUE} {TRUE,NULL,NULL,Uri_PROPERTY_PATH,S_OK,FALSE}
}, },
{FALSE}, {FALSE},
0,S_OK,TRUE, 0,S_OK,TRUE,
...@@ -4504,6 +4504,70 @@ static const uri_builder_test uri_builder_tests[] = { ...@@ -4504,6 +4504,70 @@ static const uri_builder_test uri_builder_tests[] = {
{URL_SCHEME_UNKNOWN,S_OK}, {URL_SCHEME_UNKNOWN,S_OK},
{URLZONE_INVALID,E_NOTIMPL} {URLZONE_INVALID,E_NOTIMPL}
} }
},
{ "http://google.com/",0,S_OK,FALSE,
{
{TRUE,"test/test",NULL,Uri_PROPERTY_PATH,S_OK,FALSE},
},
{FALSE},
0,S_OK,TRUE,
0,S_OK,TRUE,
0,0,0,S_OK,TRUE,
{
{"http://google.com/test/test",S_OK},
{"google.com",S_OK},
{"http://google.com/test/test",S_OK},
{"google.com",S_OK},
{"",S_FALSE},
{"",S_FALSE},
{"google.com",S_OK},
{"",S_FALSE},
{"/test/test",S_OK},
{"/test/test",S_OK},
{"",S_FALSE},
{"http://google.com/test/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}
}
},
{ "zip:testing/test",0,S_OK,FALSE,
{
{TRUE,"test",NULL,Uri_PROPERTY_PATH,S_OK,FALSE},
},
{FALSE},
0,S_OK,TRUE,
0,S_OK,TRUE,
0,0,0,S_OK,TRUE,
{
{"zip:test",S_OK},
{"",S_FALSE},
{"zip:test",S_OK},
{"",S_FALSE},
{"",S_FALSE},
{"",S_FALSE},
{"",S_FALSE},
{"",S_FALSE},
{"test",S_OK},
{"test",S_OK},
{"",S_FALSE},
{"zip:test",S_OK},
{"zip",S_OK},
{"",S_FALSE},
{"",S_FALSE}
},
{
{Uri_HOST_UNKNOWN,S_OK},
{0,S_FALSE},
{URL_SCHEME_UNKNOWN,S_OK},
{URLZONE_INVALID,E_NOTIMPL}
}
} }
}; };
......
...@@ -88,6 +88,9 @@ typedef struct { ...@@ -88,6 +88,9 @@ typedef struct {
WCHAR *password; WCHAR *password;
DWORD password_len; DWORD password_len;
WCHAR *path;
DWORD path_len;
} UriBuilder; } UriBuilder;
typedef struct { typedef struct {
...@@ -4318,6 +4321,7 @@ static ULONG WINAPI UriBuilder_Release(IUriBuilder *iface) ...@@ -4318,6 +4321,7 @@ static ULONG WINAPI UriBuilder_Release(IUriBuilder *iface)
heap_free(This->fragment); heap_free(This->fragment);
heap_free(This->host); heap_free(This->host);
heap_free(This->password); heap_free(This->password);
heap_free(This->path);
heap_free(This); heap_free(This);
} }
...@@ -4480,19 +4484,11 @@ static HRESULT WINAPI UriBuilder_GetPath(IUriBuilder *iface, DWORD *pcchPath, LP ...@@ -4480,19 +4484,11 @@ static HRESULT WINAPI UriBuilder_GetPath(IUriBuilder *iface, DWORD *pcchPath, LP
UriBuilder *This = URIBUILDER_THIS(iface); UriBuilder *This = URIBUILDER_THIS(iface);
TRACE("(%p)->(%p %p)\n", This, pcchPath, ppwzPath); TRACE("(%p)->(%p %p)\n", This, pcchPath, ppwzPath);
if(!pcchPath) { if(!This->uri || This->uri->path_start == -1 || This->modified_props & Uri_HAS_PATH)
if(ppwzPath) return get_builder_component(&This->path, &This->path_len, NULL, 0, ppwzPath, pcchPath);
*ppwzPath = NULL; else
return E_POINTER; return get_builder_component(&This->path, &This->path_len, This->uri->canon_uri+This->uri->path_start,
} This->uri->path_len, ppwzPath, pcchPath);
if(!ppwzPath) {
*pcchPath = 0;
return E_POINTER;
}
FIXME("(%p)->(%p %p)\n", This, pcchPath, ppwzPath);
return E_NOTIMPL;
} }
static HRESULT WINAPI UriBuilder_GetPort(IUriBuilder *iface, BOOL *pfHasPort, DWORD *pdwPort) static HRESULT WINAPI UriBuilder_GetPort(IUriBuilder *iface, BOOL *pfHasPort, DWORD *pdwPort)
...@@ -4605,8 +4601,10 @@ static HRESULT WINAPI UriBuilder_SetPassword(IUriBuilder *iface, LPCWSTR pwzNewV ...@@ -4605,8 +4601,10 @@ static HRESULT WINAPI UriBuilder_SetPassword(IUriBuilder *iface, LPCWSTR pwzNewV
static HRESULT WINAPI UriBuilder_SetPath(IUriBuilder *iface, LPCWSTR pwzNewValue) static HRESULT WINAPI UriBuilder_SetPath(IUriBuilder *iface, LPCWSTR pwzNewValue)
{ {
UriBuilder *This = URIBUILDER_THIS(iface); UriBuilder *This = URIBUILDER_THIS(iface);
FIXME("(%p)->(%s)\n", This, debugstr_w(pwzNewValue)); TRACE("(%p)->(%s)\n", This, debugstr_w(pwzNewValue));
return E_NOTIMPL;
This->modified_props |= Uri_HAS_PATH;
return set_builder_component(&This->path, &This->path_len, pwzNewValue, 0);
} }
static HRESULT WINAPI UriBuilder_SetPort(IUriBuilder *iface, BOOL fHasPort, DWORD dwNewValue) static HRESULT WINAPI UriBuilder_SetPort(IUriBuilder *iface, BOOL fHasPort, DWORD dwNewValue)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment