winpr: fix PathCchAddBackslash

The HRESULT S_FALSE does not indicate an error:
- return E_INVALIDARG instead of S_FALSE
- return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER) instead of S_FALSE

Also extended/fixed the corresponding ctest
This commit is contained in:
Norbert Federa 2015-06-02 21:36:31 +02:00
parent 87683ec87b
commit 21e6012226
2 changed files with 46 additions and 6 deletions

View File

@ -12,7 +12,7 @@ HRESULT PATH_CCH_ADD_SEPARATOR(PWSTR pszPath, size_t cchPath)
size_t pszPathLength;
if (!pszPath)
return S_FALSE;
return E_INVALIDARG;
pszPathLength = lstrlenW(pszPath);
@ -27,7 +27,7 @@ HRESULT PATH_CCH_ADD_SEPARATOR(PWSTR pszPath, size_t cchPath)
return S_OK;
}
return S_FALSE;
return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
}
#else
@ -37,7 +37,7 @@ HRESULT PATH_CCH_ADD_SEPARATOR(PSTR pszPath, size_t cchPath)
size_t pszPathLength;
if (!pszPath)
return S_FALSE;
return E_INVALIDARG;
pszPathLength = lstrlenA(pszPath);
@ -52,7 +52,7 @@ HRESULT PATH_CCH_ADD_SEPARATOR(PSTR pszPath, size_t cchPath)
return S_OK;
}
return S_FALSE;
return HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER);
}
#endif

View File

@ -13,6 +13,12 @@ int TestPathCchAddBackslash(int argc, char* argv[])
HRESULT status;
TCHAR Path[PATHCCH_MAX_CCH];
/**
* PathCchAddBackslash returns S_OK if the function was successful,
* S_FALSE if the path string already ends in a backslash,
* or an error code otherwise.
*/
_tcscpy(Path, testPathNoBackslash);
/* Add a backslash to a path without a trailing backslash, expect S_OK */
@ -21,7 +27,7 @@ int TestPathCchAddBackslash(int argc, char* argv[])
if (status != S_OK)
{
_tprintf(_T("PathCchAddBackslash status: 0x%08X\n"), (int) status);
_tprintf(_T("PathCchAddBackslash status: 0x%08X\n"), (unsigned) status);
return -1;
}
@ -39,7 +45,7 @@ int TestPathCchAddBackslash(int argc, char* argv[])
if (status != S_FALSE)
{
_tprintf(_T("PathCchAddBackslash status: 0x%08X\n"), (int) status);
_tprintf(_T("PathCchAddBackslash status: 0x%08X\n"), (unsigned) status);
return -1;
}
@ -49,6 +55,40 @@ int TestPathCchAddBackslash(int argc, char* argv[])
return -1;
}
/* Use NULL PSTR, expect FAILED(status) */
status = PathCchAddBackslash(NULL, PATHCCH_MAX_CCH);
if (SUCCEEDED(status))
{
_tprintf(_T("PathCchAddBackslash unexpectedly succeded with null buffer. Status: 0x%08X\n"), (unsigned) status);
return -1;
}
/* Use insufficient size value, expect FAILED(status) */
_tcscpy(Path, _T("C:\\tmp"));
status = PathCchAddBackslash(Path, 7);
if (SUCCEEDED(status))
{
_tprintf(_T("PathCchAddBackslash unexpectedly succeded with insufficient buffer size. Status: 0x%08X\n"), (unsigned) status);
return -1;
}
/* Use minimum required size value, expect S_OK */
_tcscpy(Path, _T("C:\\tmp"));
status = PathCchAddBackslash(Path, 8);
if (status != S_OK)
{
_tprintf(_T("PathCchAddBackslash failed with status: 0x%08X\n"), (unsigned) status);
return -1;
}
return 0;
}