kernelbase: Always remove trailing spaces in PathRemoveBlanks.

Signed-off-by: Esme Povirk <esme@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Esme Povirk 2021-04-24 14:12:59 -05:00 committed by Alexandre Julliard
parent 53e7842e64
commit 404cd8a92b
2 changed files with 52 additions and 5 deletions

View File

@ -1902,14 +1902,14 @@ BOOL WINAPI PathIsUNCServerW(const WCHAR *path)
void WINAPI PathRemoveBlanksA(char *path)
{
char *start;
char *start, *first;
TRACE("%s\n", wine_dbgstr_a(path));
if (!path || !*path)
return;
start = path;
start = first = path;
while (*path == ' ')
path = CharNextA(path);
@ -1917,7 +1917,7 @@ void WINAPI PathRemoveBlanksA(char *path)
while (*path)
*start++ = *path++;
if (start != path)
if (start != first)
while (start[-1] == ' ')
start--;
@ -1926,20 +1926,22 @@ void WINAPI PathRemoveBlanksA(char *path)
void WINAPI PathRemoveBlanksW(WCHAR *path)
{
WCHAR *start = path;
WCHAR *start, *first;
TRACE("%s\n", wine_dbgstr_w(path));
if (!path || !*path)
return;
start = first = path;
while (*path == ' ')
path++;
while (*path)
*start++ = *path++;
if (start != path)
if (start != first)
while (start[-1] == ' ')
start--;

View File

@ -1712,6 +1712,50 @@ static void test_PathUndecorate(void)
PathUndecorateW(NULL);
}
static void test_PathRemoveBlanks(void)
{
struct remove_blanks_test {
const char* input;
const char* expected;
};
struct remove_blanks_test tests[] = {
{"", ""},
{" ", ""},
{"test", "test"},
{" test", "test"},
{" test", "test"},
{"test ", "test"},
{"test ", "test"},
{" test ", "test"},
{" test ", "test"}};
char pathA[MAX_PATH];
WCHAR pathW[MAX_PATH];
int i, ret;
const UINT CP_ASCII = 20127;
PathRemoveBlanksW(NULL);
PathRemoveBlanksA(NULL);
for (i=0; i < ARRAY_SIZE(tests); i++)
{
strcpy(pathA, tests[i].input);
PathRemoveBlanksA(pathA);
ok(strcmp(pathA, tests[i].expected) == 0, "input string '%s', expected '%s', got '%s'\n",
tests[i].input, tests[i].expected, pathA);
ret = MultiByteToWideChar(CP_ASCII, MB_ERR_INVALID_CHARS, tests[i].input, -1, pathW, MAX_PATH);
ok(ret != 0, "MultiByteToWideChar failed for '%s'\n", tests[i].input);
PathRemoveBlanksW(pathW);
ret = WideCharToMultiByte(CP_ASCII, 0, pathW, -1, pathA, MAX_PATH, NULL, NULL);
ok(ret != 0, "WideCharToMultiByte failed for %s from test string '%s'\n", wine_dbgstr_w(pathW), tests[i].input);
ok(strcmp(pathA, tests[i].expected) == 0, "input string '%s', expected '%s', got '%s'\n",
tests[i].input, tests[i].expected, pathA);
}
}
START_TEST(path)
{
HMODULE hShlwapi = GetModuleHandleA("shlwapi.dll");
@ -1759,4 +1803,5 @@ START_TEST(path)
test_PathIsRelativeW();
test_PathStripPathA();
test_PathUndecorate();
test_PathRemoveBlanks();
}