Thomas Mullaly : urlmon: Implemented PARSE_URL_FROM_PATH for CoInternetParseIUri.
Alexandre Julliard
julliard at winehq.org
Fri Dec 3 09:31:37 CST 2010
Module: wine
Branch: master
Commit: 17880993217ab52d1771bcc5af717186ec0a77fd
URL: http://source.winehq.org/git/wine.git/?a=commit;h=17880993217ab52d1771bcc5af717186ec0a77fd
Author: Thomas Mullaly <thomas.mullaly at gmail.com>
Date: Thu Dec 2 20:58:11 2010 -0500
urlmon: Implemented PARSE_URL_FROM_PATH for CoInternetParseIUri.
---
dlls/urlmon/tests/uri.c | 10 +++++++++-
dlls/urlmon/uri.c | 32 ++++++++++++++++++++++++++++++++
2 files changed, 41 insertions(+), 1 deletions(-)
diff --git a/dlls/urlmon/tests/uri.c b/dlls/urlmon/tests/uri.c
index 01a0f5a..b135c10 100644
--- a/dlls/urlmon/tests/uri.c
+++ b/dlls/urlmon/tests/uri.c
@@ -5948,7 +5948,15 @@ static const uri_parse_test uri_parse_tests[] = {
{"file:///c:/t<|>est.mp3",0,PARSE_PATH_FROM_URL,0,"c:\\t<|>est.mp3",S_OK,FALSE},
{"file:///c:/te%XX t/",0,PARSE_PATH_FROM_URL,0,"c:\\te%XX t\\",S_OK,FALSE},
{"file://server/test",0,PARSE_PATH_FROM_URL,0,"\\\\server\\test",S_OK,FALSE},
- {"http://google.com/",0,PARSE_PATH_FROM_URL,0,"",E_INVALIDARG,FALSE}
+ {"http://google.com/",0,PARSE_PATH_FROM_URL,0,"",E_INVALIDARG,FALSE},
+
+ /* PARSE_URL_FROM_PATH tests. */
+ /* This function almost seems to useless (just returns the absolute uri). */
+ {"test.com",Uri_CREATE_ALLOW_RELATIVE,PARSE_URL_FROM_PATH,0,"test.com",S_OK,FALSE},
+ {"/test/test",Uri_CREATE_ALLOW_RELATIVE,PARSE_URL_FROM_PATH,0,"/test/test",S_OK,FALSE},
+ {"file://c:\\test\\test",Uri_CREATE_FILE_USE_DOS_PATH,PARSE_URL_FROM_PATH,0,"file://c:\\test\\test",S_OK,FALSE},
+ {"file:c:/test",0,PARSE_URL_FROM_PATH,0,"",S_OK,FALSE},
+ {"http:google.com/",0,PARSE_URL_FROM_PATH,0,"",S_OK,FALSE}
};
static inline LPWSTR a2w(LPCSTR str) {
diff --git a/dlls/urlmon/uri.c b/dlls/urlmon/uri.c
index b09a165..e409ebc 100644
--- a/dlls/urlmon/uri.c
+++ b/dlls/urlmon/uri.c
@@ -6356,6 +6356,35 @@ static HRESULT parse_path_from_url(const Uri *uri, LPWSTR output, DWORD output_l
return S_OK;
}
+static HRESULT parse_url_from_path(IUri *uri, LPWSTR output, DWORD output_len,
+ DWORD *result_len)
+{
+ HRESULT hr;
+ BSTR received;
+ DWORD len = 0;
+
+ hr = IUri_GetPropertyLength(uri, Uri_PROPERTY_ABSOLUTE_URI, &len, 0);
+ if(FAILED(hr)) {
+ *result_len = 0;
+ return hr;
+ }
+
+ *result_len = len;
+ if(len+1 > output_len)
+ return STRSAFE_E_INSUFFICIENT_BUFFER;
+
+ hr = IUri_GetAbsoluteUri(uri, &received);
+ if(FAILED(hr)) {
+ *result_len = 0;
+ return hr;
+ }
+
+ memcpy(output, received, (len+1)*sizeof(WCHAR));
+ SysFreeString(received);
+
+ return S_OK;
+}
+
/***********************************************************************
* CoInternetParseIUri (urlmon.@)
*/
@@ -6417,6 +6446,9 @@ HRESULT WINAPI CoInternetParseIUri(IUri *pIUri, PARSEACTION ParseAction, DWORD d
}
hr = parse_path_from_url(uri, pwzResult, cchResult, pcchResult);
break;
+ case PARSE_URL_FROM_PATH:
+ hr = parse_url_from_path(pIUri, pwzResult, cchResult, pcchResult);
+ break;
case PARSE_SECURITY_URL:
case PARSE_MIME:
case PARSE_SERVER:
More information about the wine-cvs
mailing list