Module: wine Branch: master Commit: 08186a9c26e954aea26ad0129cae35f24f18054e URL: http://source.winehq.org/git/wine.git/?a=commit;h=08186a9c26e954aea26ad0129c...
Author: Mariusz Pluciński vshader@gmail.com Date: Thu Jun 30 14:59:46 2011 +0200
shell32: Check for known folder existance.
---
dlls/shell32/shellpath.c | 11 +++++++++++ dlls/shell32/tests/shellpath.c | 8 ++++++-- 2 files changed, 17 insertions(+), 2 deletions(-)
diff --git a/dlls/shell32/shellpath.c b/dlls/shell32/shellpath.c index 598122f..017f101 100644 --- a/dlls/shell32/shellpath.c +++ b/dlls/shell32/shellpath.c @@ -3435,6 +3435,7 @@ static HRESULT WINAPI knownfolder_GetPath( struct knownfolder *knownfolder = impl_from_IKnownFolder( iface ); HRESULT hr; WCHAR sGuid[39]; + DWORD dwAttributes;
TRACE("(%p, 0x%08x, %p)\n", knownfolder, dwFlags, ppszPath);
@@ -3449,6 +3450,16 @@ static HRESULT WINAPI knownfolder_GetPath( else hr = SHGetKnownFolderPath( &knownfolder->id, dwFlags, NULL, ppszPath );
+ /* check if known folder really exists */ + dwAttributes = GetFileAttributesW(*ppszPath); + if(dwAttributes == INVALID_FILE_ATTRIBUTES || !(dwAttributes & FILE_ATTRIBUTE_DIRECTORY) ) + { + TRACE("directory %s not found\n", debugstr_w(*ppszPath)); + CoTaskMemFree(*ppszPath); + *ppszPath = NULL; + hr = HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND); + } + return hr; }
diff --git a/dlls/shell32/tests/shellpath.c b/dlls/shell32/tests/shellpath.c index 932aa0e..8cdae30 100644 --- a/dlls/shell32/tests/shellpath.c +++ b/dlls/shell32/tests/shellpath.c @@ -1242,9 +1242,7 @@ static void test_knownFolders(void)
/* verify sub folder - it should fail now, as we redirected it's parent folder, but we have no sub folder in new location */ hr = IKnownFolder_GetPath(subFolder, 0, &folderPath); - todo_wine ok(hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND), "unexpected value from GetPath(): 0x%08x\n", hr); - todo_wine ok(folderPath==NULL, "invalid known folder path retrieved: "%s" when NULL pointer was expected\n", wine_dbgstr_w(folderPath)); CoTaskMemFree(folderPath);
@@ -1279,7 +1277,9 @@ static void test_knownFolders(void)
/* verify sub folder. It still succeedes, so Windows does not check folder presence each time */ hr = IKnownFolder_GetPath(subFolder, 0, &folderPath); + todo_wine ok(hr == S_OK, "failed to get known folder path: 0x%08x\n", hr); + todo_wine ok(lstrcmpiW(folderPath, sSubFolder2Path)==0, "invalid known folder path retrieved: "%s" when "%s" was expected\n", wine_dbgstr_w(folderPath), wine_dbgstr_w(sSubFolder2Path)); CoTaskMemFree(folderPath);
@@ -1354,7 +1354,9 @@ static void test_knownFolders(void)
/* verify sub folder */ hr = IKnownFolder_GetPath(subFolder, 0, &folderPath); + todo_wine ok(hr == S_OK, "failed to get known folder path: 0x%08x\n", hr); + todo_wine ok(lstrcmpiW(folderPath, sSubFolder2Path)==0, "invalid known folder path retrieved: "%s" when "%s" was expected\n", wine_dbgstr_w(folderPath), wine_dbgstr_w(sSubFolder2Path)); CoTaskMemFree(folderPath);
@@ -1391,7 +1393,9 @@ static void test_knownFolders(void)
/* verify sub folder */ hr = IKnownFolder_GetPath(subFolder, 0, &folderPath); + todo_wine ok(hr == S_OK, "failed to get known folder path: 0x%08x\n", hr); + todo_wine ok(lstrcmpiW(folderPath, sSubFolder2Path)==0, "invalid known folder path retrieved: "%s" when "%s" was expected\n", wine_dbgstr_w(folderPath), wine_dbgstr_w(sSubFolder2Path)); CoTaskMemFree(folderPath);