Module: wine Branch: master Commit: 58c77f61566a3f2535fa646dc41662e0cad3e752 URL: http://source.winehq.org/git/wine.git/?a=commit;h=58c77f61566a3f2535fa646dc4...
Author: Francois Gouget fgouget@codeweavers.com Date: Mon Oct 1 03:29:55 2012 +0200
shlwapi: Implement PathCreateFromUrlAlloc().
---
dlls/shlwapi/path.c | 20 ++++++++++++++++++++ dlls/shlwapi/shlwapi.spec | 1 + dlls/shlwapi/tests/path.c | 14 ++++++++++++++ include/shlwapi.h | 10 ++++++---- 4 files changed, 41 insertions(+), 4 deletions(-)
diff --git a/dlls/shlwapi/path.c b/dlls/shlwapi/path.c index dc7bc4b..415ae29 100644 --- a/dlls/shlwapi/path.c +++ b/dlls/shlwapi/path.c @@ -3420,6 +3420,26 @@ HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath, }
/************************************************************************* + * PathCreateFromUrlAlloc [SHLWAPI.@] + */ +HRESULT WINAPI PathCreateFromUrlAlloc(LPCWSTR pszUrl, LPWSTR *pszPath, + DWORD dwReserved) +{ + WCHAR pathW[MAX_PATH]; + DWORD size; + HRESULT hr; + + size = MAX_PATH; + hr = PathCreateFromUrlW(pszUrl, pathW, &size, dwReserved); + if (SUCCEEDED(hr)) + { + /* Yes, this is supposed to crash if pszPath is NULL */ + *pszPath = StrDupW(pathW); + } + return hr; +} + +/************************************************************************* * PathRelativePathToA [SHLWAPI.@] * * Create a relative path from one path to another. diff --git a/dlls/shlwapi/shlwapi.spec b/dlls/shlwapi/shlwapi.spec index e0bdcf1..025d48a 100644 --- a/dlls/shlwapi/shlwapi.spec +++ b/dlls/shlwapi/shlwapi.spec @@ -586,6 +586,7 @@ @ stdcall PathCompactPathW(long wstr long) @ stdcall PathCreateFromUrlA(str ptr ptr long) @ stdcall PathCreateFromUrlW(wstr ptr ptr long) +@ stdcall PathCreateFromUrlAlloc(wstr ptr long) @ stdcall PathFileExistsA (str) @ stdcall PathFileExistsW (wstr) @ stdcall PathFindExtensionA (str) diff --git a/dlls/shlwapi/tests/path.c b/dlls/shlwapi/tests/path.c index 6417988..d9209bd 100644 --- a/dlls/shlwapi/tests/path.c +++ b/dlls/shlwapi/tests/path.c @@ -32,6 +32,7 @@ static HRESULT (WINAPI *pPathIsValidCharW)(WCHAR,DWORD); static LPWSTR (WINAPI *pPathCombineW)(LPWSTR, LPCWSTR, LPCWSTR); static HRESULT (WINAPI *pPathCreateFromUrlA)(LPCSTR, LPSTR, LPDWORD, DWORD); static HRESULT (WINAPI *pPathCreateFromUrlW)(LPCWSTR, LPWSTR, LPDWORD, DWORD); +static HRESULT (WINAPI *pPathCreateFromUrlAlloc)(LPCWSTR, LPWSTR*, DWORD); static BOOL (WINAPI *pPathAppendA)(LPSTR, LPCSTR);
/* ################ */ @@ -326,6 +327,18 @@ static void test_PathCreateFromUrl(void) FreeWideString(pathW); } } + + if (pPathCreateFromUrlAlloc) + { + static const WCHAR fileW[] = {'f','i','l','e',':','/','/','f','o','o',0}; + static const WCHAR fooW[] = {'\','\','f','o','o',0}; + + pathW = NULL; + ret = pPathCreateFromUrlAlloc(fileW, &pathW, 0); + ok(ret == S_OK, "got 0x%08x expected S_OK\n", ret); + ok(lstrcmpiW(pathW, fooW) == 0, "got %s expected %s\n", wine_dbgstr_w(pathW), wine_dbgstr_w(fooW)); + HeapFree(GetProcessHeap(), 0, pathW); + } }
@@ -1453,6 +1466,7 @@ START_TEST(path)
pPathCreateFromUrlA = (void*)GetProcAddress(hShlwapi, "PathCreateFromUrlA"); pPathCreateFromUrlW = (void*)GetProcAddress(hShlwapi, "PathCreateFromUrlW"); + pPathCreateFromUrlAlloc = (void*)GetProcAddress(hShlwapi, "PathCreateFromUrlAlloc"); pPathCombineW = (void*)GetProcAddress(hShlwapi, "PathCombineW"); pPathIsValidCharA = (void*)GetProcAddress(hShlwapi, (LPSTR)455); pPathIsValidCharW = (void*)GetProcAddress(hShlwapi, (LPSTR)456); diff --git a/include/shlwapi.h b/include/shlwapi.h index cbfaabe..067ef7b 100644 --- a/include/shlwapi.h +++ b/include/shlwapi.h @@ -372,16 +372,18 @@ int WINAPI PathCommonPrefixA(LPCSTR,LPCSTR,LPSTR); int WINAPI PathCommonPrefixW(LPCWSTR,LPCWSTR,LPWSTR); #define PathCommonPrefix WINELIB_NAME_AW(PathCommonPrefix)
-HRESULT WINAPI PathCreateFromUrlA(LPCSTR pszUrl, LPSTR pszPath, LPDWORD pcchPath, DWORD dwReserved); -HRESULT WINAPI PathCreateFromUrlW(LPCWSTR pszUrl, LPWSTR pszPath, LPDWORD pcchPath, DWORD dwReserved); +HRESULT WINAPI PathCreateFromUrlA(LPCSTR,LPSTR,LPDWORD,DWORD); +HRESULT WINAPI PathCreateFromUrlW(LPCWSTR,LPWSTR,LPDWORD,DWORD); #define PathCreateFromUrl WINELIB_NAME_AW(PathCreateFromUrl)
+HRESULT WINAPI PathCreateFromUrlAlloc(LPCWSTR,LPWSTR*,DWORD); + BOOL WINAPI PathFileExistsA(LPCSTR); BOOL WINAPI PathFileExistsW(LPCWSTR); #define PathFileExists WINELIB_NAME_AW(PathFileExists)
-BOOL WINAPI PathFileExistsAndAttributesA(LPCSTR lpszPath, DWORD *dwAttr); -BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR lpszPath, DWORD *dwAttr); +BOOL WINAPI PathFileExistsAndAttributesA(LPCSTR,DWORD*); +BOOL WINAPI PathFileExistsAndAttributesW(LPCWSTR,DWORD*); #define PathFileExistsAndAttributes WINELIB_NAME_AW(PathFileExistsAndAttributes)
LPSTR WINAPI PathFindExtensionA(LPCSTR);