HRESULT PathCreateFromUrlWrap(LPCWSTR pszUrl, LPWSTR pszPath, LPDWORD pcchPath, DWORD dwFlags) { HRESULT hr = S_OK; DWORD dw; WCHAR wzEscaped[MAX_URL_LENGTH]; if (!UrlIsW(pszUrl, URLIS_FILEURL)) { hr = E_INVALIDARG; goto Exit; } dw = MAX_URL_LENGTH; hr = UrlEscapeW(pszUrl, wzEscaped, &dw, URL_ESCAPE_PERCENT); if (FAILED(hr)) { goto Exit; } hr = PathCreateFromUrlW(wzEscaped, pszPath, pcchPath, dwFlags); if (FAILED(hr)) { goto Exit; } Exit: return hr; }
static void test_url_escape(const char *szUrl, DWORD dwFlags, HRESULT dwExpectReturn, const char *szExpectUrl) { CHAR szReturnUrl[INTERNET_MAX_URL_LENGTH]; DWORD dwEscaped; WCHAR ret_urlW[INTERNET_MAX_URL_LENGTH]; WCHAR *urlW, *expected_urlW; dwEscaped=INTERNET_MAX_URL_LENGTH; ok(UrlEscapeA(szUrl, szReturnUrl, &dwEscaped, dwFlags) == dwExpectReturn, "UrlEscapeA didn't return 0x%08x from \"%s\"\n", dwExpectReturn, szUrl); ok(strcmp(szReturnUrl,szExpectUrl)==0, "Expected \"%s\", but got \"%s\" from \"%s\"\n", szExpectUrl, szReturnUrl, szUrl); dwEscaped = INTERNET_MAX_URL_LENGTH; urlW = GetWideString(szUrl); expected_urlW = GetWideString(szExpectUrl); ok(UrlEscapeW(urlW, ret_urlW, &dwEscaped, dwFlags) == dwExpectReturn, "UrlEscapeW didn't return 0x%08x from \"%s\"\n", dwExpectReturn, szUrl); WideCharToMultiByte(CP_ACP,0,ret_urlW,-1,szReturnUrl,INTERNET_MAX_URL_LENGTH,0,0); ok(lstrcmpW(ret_urlW, expected_urlW)==0, "Expected \"%s\", but got \"%s\" from \"%s\" flags %08x\n", szExpectUrl, szReturnUrl, szUrl, dwFlags); FreeWideString(urlW); FreeWideString(expected_urlW); }