urlmon: Implemented PARSE_SCHEMA for CoInternetParseIUri.

This commit is contained in:
Thomas Mullaly 2010-12-02 21:22:50 -05:00 committed by Alexandre Julliard
parent 1788099321
commit a77f159019
2 changed files with 37 additions and 1 deletions

View File

@ -5956,7 +5956,11 @@ static const uri_parse_test uri_parse_tests[] = {
{"/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}
{"http:google.com/",0,PARSE_URL_FROM_PATH,0,"",S_OK,FALSE},
/* PARSE_SCHEMA tests. */
{"http://google.com/test",0,PARSE_SCHEMA,0,"http",S_OK,FALSE},
{"test",Uri_CREATE_ALLOW_RELATIVE,PARSE_SCHEMA,0,"",S_OK,FALSE}
};
static inline LPWSTR a2w(LPCSTR str) {

View File

@ -6385,6 +6385,35 @@ static HRESULT parse_url_from_path(IUri *uri, LPWSTR output, DWORD output_len,
return S_OK;
}
static HRESULT parse_schema(IUri *uri, LPWSTR output, DWORD output_len,
DWORD *result_len)
{
HRESULT hr;
DWORD len;
BSTR received;
hr = IUri_GetPropertyLength(uri, Uri_PROPERTY_SCHEME_NAME, &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_GetSchemeName(uri, &received);
if(FAILED(hr)) {
*result_len = 0;
return hr;
}
memcpy(output, received, (len+1)*sizeof(WCHAR));
SysFreeString(received);
return S_OK;
}
/***********************************************************************
* CoInternetParseIUri (urlmon.@)
*/
@ -6449,6 +6478,9 @@ HRESULT WINAPI CoInternetParseIUri(IUri *pIUri, PARSEACTION ParseAction, DWORD d
case PARSE_URL_FROM_PATH:
hr = parse_url_from_path(pIUri, pwzResult, cchResult, pcchResult);
break;
case PARSE_SCHEMA:
hr = parse_schema(pIUri, pwzResult, cchResult, pcchResult);
break;
case PARSE_SECURITY_URL:
case PARSE_MIME:
case PARSE_SERVER: