From: Piotr Caban <piotr(a)codeweavers.com> --- dlls/msvcp90/locale.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c index 1f826ac485f..192ee8b98ef 100644 --- a/dlls/msvcp90/locale.c +++ b/dlls/msvcp90/locale.c @@ -12802,18 +12802,27 @@ size_t __cdecl wcsrtombs(char *dst, const wchar_t **pstr, size_t n, mbstate_t *s char buffer[MB_LEN_MAX]; size_t ret = 0; + if (state) *state = 0; src = *pstr; while (!dst || n > ret) { int len = _Wcrtomb( buffer, *src, state, NULL ); if (len <= 0) return -1; - if (n < ret + len) break; - memcpy( dst + ret, buffer, len ); + if (dst) + { + if (n < ret + len) break; + memcpy( dst + ret, buffer, len ); + } + if (!buffer[0]) + { + src = NULL; + break; + } ret += len; - if (!buffer[0]) break; src++; } + if (dst) *pstr = src; return ret; } #endif -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6920