Francois Gouget : shlwapi: Implement PathCreateFromUrlAlloc().
Alexandre Julliard
julliard at winehq.org
Mon Oct 1 13:35:01 CDT 2012
Module: wine
Branch: master
Commit: 58c77f61566a3f2535fa646dc41662e0cad3e752
URL: http://source.winehq.org/git/wine.git/?a=commit;h=58c77f61566a3f2535fa646dc41662e0cad3e752
Author: Francois Gouget <fgouget at 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);
More information about the wine-cvs
mailing list