From db66ec0e550648f7f5abcba917f7941a661e308e Mon Sep 17 00:00:00 2001 From: Jon Griffiths Date: Mon, 14 Mar 2005 10:09:53 +0000 Subject: [PATCH] Tests and small fix for PathMakePretty(). Fix a crash and test failure with early native dlls. --- dlls/shlwapi/path.c | 55 ++++++++++++++++++++++++++-------------------- dlls/shlwapi/tests/path.c | 56 ++++++++++++++++++++++++++++++++++++++--------- 2 files changed, 77 insertions(+), 34 deletions(-) diff --git a/dlls/shlwapi/path.c b/dlls/shlwapi/path.c index adad59bbdd4..30b103ed039 100644 --- a/dlls/shlwapi/path.c +++ b/dlls/shlwapi/path.c @@ -1687,7 +1687,8 @@ BOOL WINAPI PathFileExistsA(LPCSTR lpszPath) if (!lpszPath) return FALSE; - iPrevErrMode = SetErrorMode(1); + /* Prevent a dialog box if path is on a disk that has been ejected. */ + iPrevErrMode = SetErrorMode(SEM_FAILCRITICALERRORS); dwAttr = GetFileAttributesA(lpszPath); SetErrorMode(iPrevErrMode); return dwAttr == INVALID_FILE_ATTRIBUTES ? FALSE : TRUE; @@ -1708,7 +1709,7 @@ BOOL WINAPI PathFileExistsW(LPCWSTR lpszPath) if (!lpszPath) return FALSE; - iPrevErrMode = SetErrorMode(1); + iPrevErrMode = SetErrorMode(SEM_FAILCRITICALERRORS); dwAttr = GetFileAttributesW(lpszPath); SetErrorMode(iPrevErrMode); return dwAttr == INVALID_FILE_ATTRIBUTES ? FALSE : TRUE; @@ -2580,20 +2581,23 @@ BOOL WINAPI PathMakePrettyA(LPSTR lpszPath) TRACE("(%s)\n", debugstr_a(lpszPath)); - if (!pszIter || !*pszIter) + if (!pszIter) return FALSE; - while (*pszIter) - { - if (islower(*pszIter) || IsDBCSLeadByte(*pszIter)) - return FALSE; /* Not DOS path */ - pszIter++; - } - pszIter = lpszPath + 1; - while (*pszIter) + if (*pszIter) { - *pszIter = tolower(*pszIter); - pszIter++; + do + { + if (islower(*pszIter) || IsDBCSLeadByte(*pszIter)) + return FALSE; /* Not DOS path */ + pszIter++; + } while (*pszIter); + pszIter = lpszPath + 1; + while (*pszIter) + { + *pszIter = tolower(*pszIter); + pszIter++; + } } return TRUE; } @@ -2609,20 +2613,23 @@ BOOL WINAPI PathMakePrettyW(LPWSTR lpszPath) TRACE("(%s)\n", debugstr_w(lpszPath)); - if (!pszIter || !*pszIter) + if (!pszIter) return FALSE; - while (*pszIter) - { - if (islowerW(*pszIter)) - return FALSE; /* Not DOS path */ - pszIter++; - } - pszIter = lpszPath + 1; - while (*pszIter) + if (*pszIter) { - *pszIter = tolowerW(*pszIter); - pszIter++; + do + { + if (islowerW(*pszIter)) + return FALSE; /* Not DOS path */ + pszIter++; + } while (*pszIter); + pszIter = lpszPath + 1; + while (*pszIter) + { + *pszIter = tolowerW(*pszIter); + pszIter++; + } } return TRUE; } diff --git a/dlls/shlwapi/tests/path.c b/dlls/shlwapi/tests/path.c index ace9442d598..01cc5dd257a 100644 --- a/dlls/shlwapi/tests/path.c +++ b/dlls/shlwapi/tests/path.c @@ -186,8 +186,12 @@ struct { {"c:\\foo\\bar", "file:///c:/foo/bar", S_OK}, {"c:foo\\bar", "file:///c:foo/bar", S_OK}, {"c:\\foo/b a%r", "file:///c:/foo/b%20a%25r", S_OK}, - +#if 0 + /* The following test fails on native shlwapi as distributed with Win95/98. + * Wine matches the behaviour of later versions. + */ {"xx:c:\\foo\\bar", "xx:c:\\foo\\bar", S_FALSE} +#endif }; struct { @@ -451,7 +455,7 @@ static void test_UrlCombine(void) static void test_UrlCreateFromPath(void) { - int i; + size_t i; char ret_url[INTERNET_MAX_URL_LENGTH]; DWORD len, ret; WCHAR ret_urlW[INTERNET_MAX_URL_LENGTH]; @@ -469,7 +473,8 @@ static void test_UrlCreateFromPath(void) urlW = GetWideString(TEST_URLFROMPATH[i].url); ret = UrlCreateFromPathW(pathW, ret_urlW, &len, 0); WideCharToMultiByte(CP_ACP, 0, ret_urlW, -1, ret_url, sizeof(ret_url),0,0); - ok(ret == TEST_URLFROMPATH[i].ret, "ret %08lx from path L\"%s\"\n", ret, TEST_URLFROMPATH[i].path); + ok(ret == TEST_URLFROMPATH[i].ret, "ret %08lx from path L\"%s\", expected %08lx\n", + ret, TEST_URLFROMPATH[i].path, TEST_URLFROMPATH[i].ret); ok(!lstrcmpiW(ret_urlW, urlW), "got %s expected %s from path L\"%s\"\n", ret_url, TEST_URLFROMPATH[i].url, TEST_URLFROMPATH[i].path); ok(len == strlenW(ret_urlW), "ret len %ld from path L\"%s\"\n", len, TEST_URLFROMPATH[i].path); FreeWideString(urlW); @@ -480,7 +485,7 @@ static void test_UrlCreateFromPath(void) static void test_UrlIs(void) { BOOL ret; - INT i; + size_t i; for(i = 0; i < sizeof(TEST_PATH_IS_URL) / sizeof(TEST_PATH_IS_URL[0]); i++) { ret = UrlIsA( TEST_PATH_IS_URL[i].path, URLIS_URL ); @@ -496,7 +501,7 @@ static void test_UrlUnescape(void) WCHAR ret_urlW[INTERNET_MAX_URL_LENGTH]; WCHAR *urlW, *expected_urlW; DWORD dwEscaped; - unsigned int i; + size_t i; for(i=0; i