Dan Hipschman <dsh(a)linux.ucla.edu> writes:
INT WINAPI GetTextFaceA( HDC hdc, INT count, LPSTR name ) { - INT res = GetTextFaceW(hdc, 0, NULL); - LPWSTR nameW = HeapAlloc( GetProcessHeap(), 0, res * 2 ); - GetTextFaceW( hdc, res, nameW ); - if (name) { - if (count && !WideCharToMultiByte( CP_ACP, 0, nameW, -1, name, count, NULL, NULL)) + LPWSTR nameW = HeapAlloc( GetProcessHeap(), 0, count * sizeof nameW[0] ); + INT res = GetTextFaceW( hdc, count, nameW ); + if (count && res) + { + WideCharToMultiByte( CP_ACP, 0, nameW, -1, name, count, NULL, NULL); name[count-1] = 0; - res = strlen(name); + } + HeapFree( GetProcessHeap(), 0, nameW ); + /* GetTextFaceA does NOT include the nul byte in the return count. */ + return res ? res - 1 : 0; } else - res = WideCharToMultiByte( CP_ACP, 0, nameW, -1, NULL, 0, NULL, NULL); - HeapFree( GetProcessHeap(), 0, nameW ); - return res; + return GetTextFaceW(hdc, 0, NULL); }
This is wrong, you can't return the W length from the A function. -- Alexandre Julliard julliard(a)winehq.org