gecko and native msvcrt

Jacek Caban jacek at codeweavers.com
Sat Apr 30 08:18:06 CDT 2011


On 4/30/11 3:05 PM, Eric Pouech wrote:
> Le 30/04/2011 12:15, Jacek Caban a écrit :
>> On 4/29/11 11:58 PM, Eric Pouech wrote:
>>> Le 29/04/2011 23:07, Dan Kegel a écrit :
>>>> While testing a game with current gecko, I saw the error
>>>>
>>>> wine: Call from 0x7bc4ad90 to unimplemented function 
>>>> msvcrt.dll._snwprintf_s,
>>>> aborting
>>>>
>>>> The game needed a native msvcrt, so I had installed one with 
>>>> winetricks,
>>>> and it didn't export that function.
>>>>
>>>> So it seems that new gecko is incompatible with old msvcrt,
>>>> and using native msvcrt as a workaround for bugs in wine's
>>>> version is going to be harder than it used to be.
>>>>
>>>> Time to fix more of them msvcrt bugs, I guess...
>>>> And/or find a more up to date msvcrt.dll for winetricks.
>>>>
>>>>
>>>>
>>> or link gecko against msvcr80 or msvcr90 instead of msvcrt
>>
>> It's harder than it seems, esp. because it's not well supported by 
>> mingw-w64. Also even if we did it, Wine would still forward these 
>> calls to msvcrt, so one would need another native DLL. Given that, we 
>> need more serious reason for the change than supporting hackish 
>> winetricks verb. Fixing our msvcrt implementation is the way to go IMO.
> I don't agree on your last point
> in native msvcrt, there is none _snwprintf_s function (it only exists 
> in msvcrN where N>=8 (didn't really check all versions))
> _snwprintf_s is implemented in our msvcrN (which forwards them to msvcrt)
> the point here is that one tries to run gecko with native msvcrt which 
> doesn't contain this function
> so if gecko needs it, it shouldn't link to msvcrt but to msvcrN is we 
> want to maintain compat with native DLLs

I've checked my Win7 msvcrt.dll version and it exports _snwprintf_s 
(that's why Dan mentioned finding more up to date msvcrt.dll as an 
alternative solution). My point of fixing msvcrt was not related to 
_snwprintf_s, I was talking about the reason someone wants to use msvcrt 
in the first place (it's an app that requires it due to other bug, not 
Gecko). We use mingw-w64 msvcrt import library which doesn't contain 
Wine extensions to msvcrt.dll, so we're safe from accidentally using 
Wine-only APIs.

BTW, mingw-w64 contains limited support for some msvcrN dlls-only 
function in its crt (we link it statically), which was enough for our 
needs so far.

Jacek



More information about the wine-devel mailing list