Module: wine Branch: master Commit: 8758a8a671c14d4e4c1303ea9dacd5e7066e5475 URL: http://source.winehq.org/git/wine.git/?a=commit;h=8758a8a671c14d4e4c1303ea9d...
Author: Michael Müller michael@fds-team.de Date: Sun Sep 28 17:30:45 2014 +0200
shlwapi: Correctly treat '.' when enumerating files in PathIsDirectoryEmptyW.
---
dlls/shlwapi/path.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/dlls/shlwapi/path.c b/dlls/shlwapi/path.c index a3b462c..dae949a 100644 --- a/dlls/shlwapi/path.c +++ b/dlls/shlwapi/path.c @@ -3872,13 +3872,13 @@ BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR lpszPath) WCHAR szSearch[MAX_PATH]; DWORD dwLen; HANDLE hfind; - BOOL retVal = FALSE; + BOOL retVal = TRUE; WIN32_FIND_DATAW find_data;
TRACE("(%s)\n",debugstr_w(lpszPath));
if (!lpszPath || !PathIsDirectoryW(lpszPath)) - return FALSE; + return FALSE;
lstrcpynW(szSearch, lpszPath, MAX_PATH); PathAddBackslashW(szSearch); @@ -3888,14 +3888,23 @@ BOOL WINAPI PathIsDirectoryEmptyW(LPCWSTR lpszPath)
strcpyW(szSearch + dwLen, szAllFiles); hfind = FindFirstFileW(szSearch, &find_data); - if (hfind != INVALID_HANDLE_VALUE) + if (hfind == INVALID_HANDLE_VALUE) + return FALSE; + + do { - if (find_data.cFileName[0] == '.' && find_data.cFileName[1] == '.') - /* The only directory entry should be the parent */ - retVal = !FindNextFileW(hfind, &find_data); - FindClose(hfind); + if (find_data.cFileName[0] == '.') + { + if (find_data.cFileName[1] == '\0') continue; + if (find_data.cFileName[1] == '.' && find_data.cFileName[2] == '\0') continue; + } + + retVal = FALSE; + break; } + while (FindNextFileW(hfind, &find_data));
+ FindClose(hfind); return retVal; }