Store the result of the A/W conversions in the extra buffer space.
This commit is contained in:
parent
31d0e7421e
commit
37871ce3f1
|
@ -736,20 +736,13 @@ BOOL WINAPI VerQueryValueA( LPVOID pBlock, LPCSTR lpSubBlock,
|
|||
|
||||
if (ret && strcasecmp( lpSubBlock, rootA ) && strcasecmp( lpSubBlock, varfileinfoA ))
|
||||
{
|
||||
LPSTR lplpBufferA;
|
||||
LPSTR lpBufferA = (LPSTR)pBlock + info->wLength + 4;
|
||||
DWORD pos = (LPSTR)*lplpBuffer - (LPSTR)pBlock;
|
||||
|
||||
len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)*lplpBuffer, -1, NULL, 0, NULL, NULL);
|
||||
lplpBufferA = HeapAlloc(GetProcessHeap(), 0, len * sizeof(char));
|
||||
|
||||
if (!lplpBufferA)
|
||||
return FALSE;
|
||||
|
||||
WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)*lplpBuffer, -1, lplpBufferA, len, NULL, NULL);
|
||||
|
||||
memcpy(*lplpBuffer, lplpBufferA, len);
|
||||
len = WideCharToMultiByte(CP_ACP, 0, (LPCWSTR)*lplpBuffer, -1,
|
||||
lpBufferA + pos, info->wLength - pos, NULL, NULL);
|
||||
*lplpBuffer = lpBufferA + pos;
|
||||
*puLen = len;
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, lplpBufferA);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
@ -792,20 +785,14 @@ BOOL WINAPI VerQueryValueW( LPVOID pBlock, LPCWSTR lpSubBlock,
|
|||
|
||||
if (ret && strcmpiW( lpSubBlock, rootW ) && strcmpiW( lpSubBlock, varfileinfoW ))
|
||||
{
|
||||
LPWSTR lplpBufferW;
|
||||
LPWSTR lpBufferW = (LPWSTR)((LPSTR)pBlock + info->wLength);
|
||||
DWORD pos = (LPSTR)*lplpBuffer - (LPSTR)pBlock;
|
||||
DWORD max = (info->wLength - sizeof(VS_FIXEDFILEINFO)) * 4 - info->wLength;
|
||||
|
||||
len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)*lplpBuffer, -1, NULL, 0);
|
||||
lplpBufferW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
|
||||
|
||||
if (!lplpBufferW)
|
||||
return FALSE;
|
||||
|
||||
MultiByteToWideChar(CP_ACP, 0, (LPCSTR)*lplpBuffer, -1, lplpBufferW, len);
|
||||
|
||||
memcpy(*lplpBuffer, lplpBufferW, len * sizeof(WCHAR));
|
||||
len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)*lplpBuffer, -1,
|
||||
lpBufferW + pos, max/sizeof(WCHAR) - pos );
|
||||
*lplpBuffer = lpBufferW + pos;
|
||||
*puLen = len;
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, lplpBufferW);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -391,7 +391,7 @@ static void test_32bit_win(void)
|
|||
/* Test a second time */
|
||||
retA = VerQueryValueA( pVersionInfoA, FileDescriptionA, (LPVOID *)&pBufA, &uiLengthA );
|
||||
ok (retA, "VerQueryValueA failed: GetLastError = 0x%08lx\n", GetLastError());
|
||||
todo_wine ok( !lstrcmpA(WineFileDescriptionA, pBufA), "FileDescription should have been 'Wine version test'\n");
|
||||
ok( !lstrcmpA(WineFileDescriptionA, pBufA), "FileDescription should have been 'Wine version test'\n");
|
||||
|
||||
if (is_unicode_enabled)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue