setupapi: Implement SetupOpenLog(), SetupLogErrorA(), SetupLogErrorW(), SetupCloseLog() (try 3)
Nikolay Sivov
bunglehead at gmail.com
Sun Feb 8 07:28:16 CST 2015
On 08.02.2015 16:17, Pierre Schweitzer wrote:
> On 08/02/2015 13:46, Nikolay Sivov wrote:
>>> + if (MessageString)
>>> + {
>>> + len = lstrlenA(MessageString) + 1;
>>> + msg = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR));
>>> + if (msg == NULL)
>>> + {
>>> + SetLastError(ERROR_NOT_ENOUGH_MEMORY);
>>> + return FALSE;
>>> + }
>>> + MultiByteToWideChar(CP_ACP, 0, MessageString, -1, msg, len);
>>> + }
>>
>> That's not how A->W conversion works, we have tons of examples for that.
>
> Well....
> http://source.winehq.org/git/wine.git/blob/HEAD:/dlls/setupapi/query.c#l118
>
> Feel free to point at some other location.
Yes, that one should be fixed too I suppose. Clean way is to call mbtowc
twice, and first call would return a length of resulting WCHAR string.
>
>>> OsVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOW);
>>> if (!GetVersionExW(&OsVersionInfo))
>>> return FALSE;
>>> + InitializeCriticalSection(&setuplog_critical);
>>> SETUPAPI_hInstance = hinstDLL;
>>> break;
>>> case DLL_PROCESS_DETACH:
>>> if (lpvReserved) break;
>>> + DeleteCriticalSection(&setuplog_critical);
>>> if (CABINET_hInstance) FreeLibrary(CABINET_hInstance);
>>> break;
>>
>> You won't need these calls once you init it like the rest of Wine code
>> does. Also what about closing files on DLL_PROCESS_DETACH?
>
> I couldn't find any evidence that Windows does this.
> And they'll be closed as soon the process dies.
Yes, but it will leak every time you do LoadLibrary/FreeLibrary.
More information about the wine-devel
mailing list