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