Andrew Eikum : mshtml: Reimplement HTMLLocation::get_pathname.
Alexandre Julliard
julliard at winehq.org
Mon Oct 19 09:56:13 CDT 2009
Module: wine
Branch: master
Commit: a03d0bcaa98ee9697962322984188b2bd67c42fc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a03d0bcaa98ee9697962322984188b2bd67c42fc
Author: Andrew Eikum <aeikum at codeweavers.com>
Date: Fri Oct 16 11:45:37 2009 -0500
mshtml: Reimplement HTMLLocation::get_pathname.
---
dlls/mshtml/htmllocation.c | 27 ++++++---------------------
dlls/mshtml/tests/htmllocation.c | 8 ++++----
2 files changed, 10 insertions(+), 25 deletions(-)
diff --git a/dlls/mshtml/htmllocation.c b/dlls/mshtml/htmllocation.c
index 4655a63..5f09958 100644
--- a/dlls/mshtml/htmllocation.c
+++ b/dlls/mshtml/htmllocation.c
@@ -428,10 +428,7 @@ static HRESULT WINAPI HTMLLocation_put_pathname(IHTMLLocation *iface, BSTR v)
static HRESULT WINAPI HTMLLocation_get_pathname(IHTMLLocation *iface, BSTR *p)
{
HTMLLocation *This = HTMLLOCATION_THIS(iface);
- WCHAR buf[INTERNET_MAX_PATH_LENGTH];
- URL_COMPONENTSW url = {sizeof(url)};
- const WCHAR *doc_url;
- DWORD size = 0;
+ URL_COMPONENTSW url = {sizeof(URL_COMPONENTSW)};
HRESULT hres;
TRACE("(%p)->(%p)\n", This, p);
@@ -439,29 +436,17 @@ static HRESULT WINAPI HTMLLocation_get_pathname(IHTMLLocation *iface, BSTR *p)
if(!p)
return E_POINTER;
- hres = get_url(This, &doc_url);
- if(FAILED(hres))
- return hres;
-
- hres = CoInternetParseUrl(doc_url, PARSE_PATH_FROM_URL, 0, buf, sizeof(buf), &size, 0);
- if(SUCCEEDED(hres)) {
- *p = SysAllocString(buf);
- if(!*p)
- return E_OUTOFMEMORY;
- return S_OK;
- }
-
url.dwUrlPathLength = 1;
+ url.dwExtraInfoLength = 1;
hres = get_url_components(This, &url);
if(FAILED(hres))
return hres;
- if(!url.dwUrlPathLength) {
- *p = NULL;
- return S_OK;
- }
+ if(url.dwUrlPathLength && url.lpszUrlPath[0] == '/')
+ *p = SysAllocStringLen(url.lpszUrlPath + 1, url.dwUrlPathLength - 1);
+ else
+ *p = SysAllocStringLen(url.lpszUrlPath, url.dwUrlPathLength);
- *p = SysAllocStringLen(url.lpszUrlPath, url.dwUrlPathLength);
if(!*p)
return E_OUTOFMEMORY;
return S_OK;
diff --git a/dlls/mshtml/tests/htmllocation.c b/dlls/mshtml/tests/htmllocation.c
index 671d460..e4d545e 100644
--- a/dlls/mshtml/tests/htmllocation.c
+++ b/dlls/mshtml/tests/htmllocation.c
@@ -61,7 +61,7 @@ static const struct location_test http_test = {
"www.winehq.org:80", TRUE,
"www.winehq.org", TRUE,
"80", TRUE,
- "", FALSE,
+ "", TRUE,
"?search", FALSE,
"#hash", FALSE
};
@@ -75,7 +75,7 @@ static const struct location_test http_file_test = {
"www.winehq.org:80", TRUE,
"www.winehq.org", TRUE,
"80", TRUE,
- "file", FALSE,
+ "file", TRUE,
"?search", FALSE,
"#hash", FALSE
};
@@ -89,7 +89,7 @@ static const struct location_test ftp_test = {
"ftp.winehq.org:21", TRUE,
"ftp.winehq.org", TRUE,
"21", TRUE,
- "", FALSE,
+ "", TRUE,
NULL, FALSE,
NULL, FALSE
};
@@ -103,7 +103,7 @@ static const struct location_test ftp_file_test = {
"ftp.winehq.org:21", TRUE,
"ftp.winehq.org", TRUE,
"21", TRUE,
- "file", FALSE,
+ "file", TRUE,
NULL, FALSE,
NULL, FALSE
};
More information about the wine-cvs
mailing list