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;
|
BOOL unixabsolute;
|
||||||
WIN32_FIND_DATAW wfd;
|
WIN32_FIND_DATAW wfd;
|
||||||
HANDLE goit;
|
HANDLE goit;
|
||||||
|
BOOL is_legal_8dot3;
|
||||||
|
|
||||||
if (!shortpath)
|
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);
|
goit = FindFirstFileW(tmplongpath, &wfd);
|
||||||
if (goit == INVALID_HANDLE_VALUE)
|
if (goit == INVALID_HANDLE_VALUE)
|
||||||
{
|
{
|
||||||
|
@ -374,7 +375,12 @@ DWORD WINAPI GetLongPathNameW( LPCWSTR shortpath, LPWSTR longpath, DWORD longlen
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
FindClose(goit);
|
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);
|
lp += strlenW(tmplongpath + lp);
|
||||||
sp += tmplen;
|
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);
|
"GetLongPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr);
|
||||||
tmpstr[len] = tolower(tmpstr[len]);
|
tmpstr[len] = tolower(tmpstr[len]);
|
||||||
ok(GetLongPathNameA(tmpstr,tmpstr1,MAX_PATH),"GetLongPathNameA failed\n");
|
ok(GetLongPathNameA(tmpstr,tmpstr1,MAX_PATH),"GetLongPathNameA failed\n");
|
||||||
todo_wine
|
|
||||||
ok(lstrcmpA(tmpstr,tmpstr1)==0,
|
ok(lstrcmpA(tmpstr,tmpstr1)==0,
|
||||||
"GetLongPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr);
|
"GetLongPathNameA returned '%s' instead of '%s'\n",tmpstr1,tmpstr);
|
||||||
sprintf(tmpstr,"%s/%s",SHORTDIR,SHORTFILE);
|
sprintf(tmpstr,"%s/%s",SHORTDIR,SHORTFILE);
|
||||||
|
|
Loading…
Reference in New Issue