diff --git a/dlls/kernel32/path.c b/dlls/kernel32/path.c index 1728bfac40e..7ed1c615647 100644 --- a/dlls/kernel32/path.c +++ b/dlls/kernel32/path.c @@ -489,6 +489,16 @@ DWORD WINAPI GetShortPathNameW( LPCWSTR longpath, LPWSTR shortpath, DWORD shortl tmplen = p - (longpath + lp); lstrcpynW(tmpshortpath + sp, longpath + lp, tmplen + 1); + if (tmpshortpath[sp] == '.') + { + if (tmplen == 1 || (tmplen == 2 && tmpshortpath[sp + 1] == '.')) + { + sp += tmplen; + lp += tmplen; + continue; + } + } + /* Check if the file exists and use the existing short file name */ goit = FindFirstFileW(tmpshortpath, &wfd); if (goit == INVALID_HANDLE_VALUE) goto notfound; diff --git a/dlls/kernel32/tests/path.c b/dlls/kernel32/tests/path.c index fe699b2cabc..62236a04b3c 100644 --- a/dlls/kernel32/tests/path.c +++ b/dlls/kernel32/tests/path.c @@ -1963,7 +1963,6 @@ todo_wine strcpy(buf, "deadbeef"); ret = GetShortPathNameA(".", buf, MAX_PATH); ok(ret, "GetShortPathName error %d\n", GetLastError()); -todo_wine ok(!strcmp(buf, "."), "expected ., got %s\n", buf); strcpy(buf, "deadbeef"); @@ -1974,7 +1973,6 @@ todo_wine strcpy(buf, "deadbeef"); ret = GetShortPathNameA("..", buf, MAX_PATH); ok(ret, "GetShortPathName error %d\n", GetLastError()); -todo_wine ok(!strcmp(buf, ".."), "expected .., got %s\n", buf); strcpy(buf, "deadbeef"); @@ -1985,9 +1983,7 @@ todo_wine ok(!strcmp(buf, "..\\foo\\file"), "expected ..\\foo\\file, got %s\n", buf); strcpy(buf, "deadbeef"); ret = GetShortPathNameA("..\\foo\\file", buf, MAX_PATH); -todo_wine ok(ret, "GetShortPathName error %d\n", GetLastError()); -todo_wine ok(!strcmp(buf, "..\\foo\\file"), "expected ..\\foo\\file, got %s\n", buf); SetCurrentDirectoryA("..");