_mbctolower_l - converts multibyte uppercase character to lowercase character, by using specified locale that's passed in.
More information about these methods are available at:
https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/mbctolowe…
More information about application crash:
https://bugs.winehq.org/show_bug.cgi?id=45273
--
v2: msvcrt: implement missing _mbsupr_s_l CRT function to fix ChessBase 14 crash
msvcrt: implement missing _mbslwr_s_l CRT function to fix ChessBase 14 crash
msvcrt: implement missing _mbctoupper_l CRT function to fix ChessBase 14 crash
msvcrt: implement missing _mbctolower_l CRT function to fix ChessBase 14 crash
https://gitlab.winehq.org/wine/wine/-/merge_requests/1090
On Tue Oct 18 12:28:34 2022 +0000, Rémi Bernon wrote:
> Can `current_modref` really still be NULL now if
> `LdrGetProcedureAddress` also sets it?
Seems like it, although I haven't verified it rigorously.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7#note_11165
On Tue Oct 18 12:28:32 2022 +0000, Rémi Bernon wrote:
> I think you can simplify this a bit, by doing `if ((current_modref =
> get_modref(...)))`, after saving its previous value, and restoring it
> before leaving the CS.
> Then I'm not sure what side effects this could have, and maybe it'd be
> better to have this specific change separate from the rest?
How about
```c
RtlEnterCriticalSection( &loader_section );
prev = current_modref;
wm = get_modref( module );
if (wm) current_modref = wm;
if (!wm) ret = STATUS_DLL_NOT_FOUND;
else
{ ... }
current_modref = prev;
RtlLeaveCriticalSection( &loader_section );
```
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7#note_11162
On Tue Oct 18 15:32:53 2022 +0000, Jinoh Kang wrote:
> Also note that the forward[1-3] DLLs are exactly designed to test
> transitively forwarded exports.
Correction:
The importer DLL references not only the final DLL but also every intermediate DLL in the forward chain. Intermediate DLLs do not gain any new dependencies, even if they are used in the resolution process of forwarded exports. Only the earliest import DLLs gain dependencies.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7#note_11161
On Tue Oct 18 15:31:21 2022 +0000, Jinoh Kang wrote:
> > Then what happens here if `find_ordinal_export` finds another
> transitive forwarded export? Should we still keep the same `current_modref`?
> Yes, we should. The importer DLL references the eventual DLL the target
> object resides in, not any of the intermediate DLL in the forward chain.
> > Should we add the second forwarded module to the first one
> dependencies instead?
> No, we should only add the last non-forwarding module to the importer
> DLL's dependencies.
Also note that the forward[1-3] DLLs are exactly designed to test transitively forwarded exports.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7#note_11158
> Then what happens here if `find_ordinal_export` finds another transitive forwarded export? Should we still keep the same `current_modref`?
Yes, we should. The importer DLL references the eventual DLL the target object resides in, not any of the intermediate DLL in the forward chain.
> Should we add the second forwarded module to the first one dependencies instead?
No, we should only add the last non-forwarding module to the importer DLL's dependencies.
--
https://gitlab.winehq.org/wine/wine/-/merge_requests/7#note_11157