Thomas Mullaly : urlmon: Implemented IUriBuilder_{Get/Set}Path.
Alexandre Julliard
julliard at winehq.org
Mon Sep 6 13:53:13 CDT 2010
Module: wine
Branch: master
Commit: 4a352bd78d1aebcce3bdece888fcb8532a11855c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=4a352bd78d1aebcce3bdece888fcb8532a11855c
Author: Thomas Mullaly <thomas.mullaly at gmail.com>
Date: Sun Sep 5 12:57:48 2010 -0400
urlmon: Implemented IUriBuilder_{Get/Set}Path.
---
dlls/urlmon/tests/uri.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++-
dlls/urlmon/uri.c | 28 +++++++++----------
2 files changed, 78 insertions(+), 16 deletions(-)
diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c
index cfd7a04..684a608 100644
--- a/dlls/urlmon/tests/uri.c
+++ b/dlls/urlmon/tests/uri.c
@@ -4347,7 +4347,7 @@ static const uri_builder_test uri_builder_tests[] = {
{
{TRUE,"http",NULL,Uri_PROPERTY_SCHEME_NAME,S_OK,TRUE},
{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},
0,S_OK,TRUE,
@@ -4504,6 +4504,70 @@ static const uri_builder_test uri_builder_tests[] = {
{URL_SCHEME_UNKNOWN,S_OK},
{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}
+ }
}
};
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index b5e9df0..41c2343 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -88,6 +88,9 @@ typedef struct {
WCHAR *password;
DWORD password_len;
+
+ WCHAR *path;
+ DWORD path_len;
} UriBuilder;
typedef struct {
@@ -4318,6 +4321,7 @@ static ULONG WINAPI UriBuilder_Release(IUriBuilder *iface)
heap_free(This->fragment);
heap_free(This->host);
heap_free(This->password);
+ heap_free(This->path);
heap_free(This);
}
@@ -4480,19 +4484,11 @@ static HRESULT WINAPI UriBuilder_GetPath(IUriBuilder *iface, DWORD *pcchPath, LP
UriBuilder *This = URIBUILDER_THIS(iface);
TRACE("(%p)->(%p %p)\n", This, pcchPath, ppwzPath);
- if(!pcchPath) {
- if(ppwzPath)
- *ppwzPath = NULL;
- return E_POINTER;
- }
-
- if(!ppwzPath) {
- *pcchPath = 0;
- return E_POINTER;
- }
-
- FIXME("(%p)->(%p %p)\n", This, pcchPath, ppwzPath);
- return E_NOTIMPL;
+ if(!This->uri || This->uri->path_start == -1 || This->modified_props & Uri_HAS_PATH)
+ return get_builder_component(&This->path, &This->path_len, NULL, 0, ppwzPath, pcchPath);
+ else
+ return get_builder_component(&This->path, &This->path_len, This->uri->canon_uri+This->uri->path_start,
+ This->uri->path_len, ppwzPath, pcchPath);
}
static HRESULT WINAPI UriBuilder_GetPort(IUriBuilder *iface, BOOL *pfHasPort, DWORD *pdwPort)
@@ -4605,8 +4601,10 @@ static HRESULT WINAPI UriBuilder_SetPassword(IUriBuilder *iface, LPCWSTR pwzNewV
static HRESULT WINAPI UriBuilder_SetPath(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));
+
+ 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)
More information about the wine-cvs
mailing list