shell32: Merge ANSI part of DROPFILES handler into DragQueryFileW.

This commit is contained in:
Akihiro Sagawa 2022-10-29 17:49:15 +09:00 committed by Alexandre Julliard
parent 2176e83060
commit 3389ba479b
2 changed files with 37 additions and 32 deletions

View file

@ -621,50 +621,58 @@ UINT WINAPI DragQueryFileW(
LPWSTR lpszwFile,
UINT lLength)
{
LPWSTR lpwDrop;
LPWSTR buffer = NULL;
LPCWSTR filename;
UINT i = 0;
DROPFILES *lpDropFileStruct = GlobalLock(hDrop);
const DROPFILES *lpDropFileStruct = GlobalLock(hDrop);
TRACE("(%p, %x, %p, %u)\n", hDrop,lFile,lpszwFile,lLength);
if(!lpDropFileStruct) goto end;
lpwDrop = (LPWSTR) ((LPSTR)lpDropFileStruct + lpDropFileStruct->pFiles);
if(lpDropFileStruct->fWide == FALSE) {
LPSTR lpszFileA = NULL;
if(lpszwFile && lFile != 0xFFFFFFFF) {
lpszFileA = malloc(lLength);
if(lpszFileA == NULL) {
if(lpDropFileStruct->fWide)
{
LPCWSTR p = (LPCWSTR) ((LPCSTR)lpDropFileStruct + lpDropFileStruct->pFiles);
while (i++ < lFile)
{
while (*p++); /* skip filename */
if (!*p)
{
i = (lFile == 0xFFFFFFFF) ? i : 0;
goto end;
}
}
i = DragQueryFileA(hDrop, lFile, lpszFileA, lLength);
if(lpszFileA) {
MultiByteToWideChar(CP_ACP, 0, lpszFileA, -1, lpszwFile, lLength);
free(lpszFileA);
filename = p;
}
else
{
LPCSTR p = (LPCSTR)lpDropFileStruct + lpDropFileStruct->pFiles;
while (i++ < lFile)
{
while (*p++); /* skip filename */
if (!*p)
{
i = (lFile == 0xFFFFFFFF) ? i : 0;
goto end;
}
}
goto end;
i = MultiByteToWideChar(CP_ACP, 0, p, -1, NULL, 0);
buffer = malloc(i * sizeof(WCHAR));
if (!buffer)
{
i = 0;
goto end;
}
MultiByteToWideChar(CP_ACP, 0, p, -1, buffer, i);
filename = buffer;
}
i = 0;
while (i++ < lFile)
{
while (*lpwDrop++); /* skip filename */
if (!*lpwDrop)
{
i = (lFile == 0xFFFFFFFF) ? i : 0;
goto end;
}
}
i = lstrlenW(lpwDrop);
i = lstrlenW(filename);
if ( !lpszwFile) goto end; /* needed buffer size */
lstrcpynW (lpszwFile, lpwDrop, lLength);
lstrcpynW(lpszwFile, filename, lLength);
end:
GlobalUnlock(hDrop);
free(buffer);
return i;
}

View file

@ -809,16 +809,13 @@ static LRESULT WINAPI drop_window_proc(HWND hwnd, UINT msg, WPARAM wparam, LPARA
len = wcslen(expected_filenameW);
num = DragQueryFileW(hDrop, 0, NULL, 0);
todo_wine_if(expected_filename[0] == 'd' && !(flags & DROP_WIDE_FILENAME))
ok(num == len, "expected %u, got %u\n", len, num);
num = DragQueryFileW(hDrop, 0, filenameW, 0);
todo_wine_if(expected_filename[0] == 'd' && !(flags & DROP_WIDE_FILENAME))
ok(num == len, "expected %u, got %u\n", len, num);
ok(!wcscmp(filenameW, L"dummy"), "got %s\n", wine_dbgstr_w(filenameW));
num = DragQueryFileW(hDrop, 0, filenameW, ARRAY_SIZE(filename));
todo_wine_if(expected_filename[0] == 'd' && !(flags & DROP_WIDE_FILENAME))
ok(num == len, "expected %u, got %u\n", len, num);
ok(!wcscmp(filenameW, expected_filenameW), "expected %s, got %s\n",
wine_dbgstr_w(expected_filenameW), wine_dbgstr_w(filenameW));