kernel32: Revise GetLongPathNameA to avoid overriding the input on long names.
Signed-off-by: Jeremy White <jwhite@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
ee1260e0d2
commit
7dea64279e
|
@ -292,6 +292,7 @@ DWORD WINAPI GetLongPathNameW( LPCWSTR shortpath, LPWSTR longpath, DWORD longlen
|
|||
BOOL unixabsolute;
|
||||
WIN32_FIND_DATAW wfd;
|
||||
HANDLE goit;
|
||||
BOOL is_legal_8dot3;
|
||||
|
||||
if (!shortpath)
|
||||
{
|
||||
|
@ -365,7 +366,7 @@ DWORD WINAPI GetLongPathNameW( LPCWSTR shortpath, LPWSTR longpath, DWORD longlen
|
|||
}
|
||||
}
|
||||
|
||||
/* Check if the file exists and use the existing file name */
|
||||
/* Check if the file exists */
|
||||
goit = FindFirstFileW(tmplongpath, &wfd);
|
||||
if (goit == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
|
@ -374,7 +375,12 @@ DWORD WINAPI GetLongPathNameW( LPCWSTR shortpath, LPWSTR longpath, DWORD longlen
|
|||
return 0;
|
||||
}
|
||||
FindClose(goit);
|
||||
strcpyW(tmplongpath + lp, wfd.cFileName);
|
||||
|
||||
is_legal_8dot3 = FALSE;
|
||||
CheckNameLegalDOS8Dot3W(tmplongpath + lp, NULL, 0, NULL, &is_legal_8dot3);
|
||||
/* Use the existing file name if it's a short name */
|
||||
if (is_legal_8dot3)
|
||||
strcpyW(tmplongpath + lp, wfd.cFileName);
|
||||
lp += strlenW(tmplongpath + lp);
|
||||
sp += tmplen;
|
||||
}
|
||||
|
|
|
@ -868,7 +868,6 @@ static void test_PathNameA(CHAR *curdir, CHAR curDrive, CHAR otherDrive)
|
|||
"GetLongPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr);
|
||||
tmpstr[len] = tolower(tmpstr[len]);
|
||||
ok(GetLongPathNameA(tmpstr,tmpstr1,MAX_PATH),"GetLongPathNameA failed\n");
|
||||
todo_wine
|
||||
ok(lstrcmpA(tmpstr,tmpstr1)==0,
|
||||
"GetLongPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr);
|
||||
sprintf(tmpstr,"%s/%s",SHORTDIR,SHORTFILE);
|
||||
|
|
Loading…
Reference in New Issue