msvcp90: Return required buffer size in _Strxfrm.

Signed-off-by: Piotr Caban <piotr@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
Piotr Caban 2021-02-03 11:56:29 +01:00 committed by Alexandre Julliard
parent ae0ba3f4a3
commit 7c5b40ed2a
1 changed files with 7 additions and 4 deletions

View File

@ -12663,7 +12663,8 @@ int __cdecl _To_wide(const char *src, wchar_t *dst)
return MultiByteToWideChar(CP_ACP, 0, src, -1, dst, MAX_PATH);
}
size_t __cdecl _Strxfrm(char *dest, char *dest_end, const char *src, const char *src_end, _Collvec *coll)
size_t __cdecl _Strxfrm(char *dest, char *dest_end,
const char *src, const char *src_end, _Collvec *coll)
{
size_t dest_len = dest_end - dest;
size_t src_len = src_end - src;
@ -12691,12 +12692,14 @@ size_t __cdecl _Strxfrm(char *dest, char *dest_end, const char *src, const char
}
len = MultiByteToWideChar(cv.page, MB_ERR_INVALID_CHARS, src, src_len, NULL, 0);
if (!len) return 0;
if (!len) return INT_MAX;
buf = heap_alloc(len * sizeof(WCHAR));
if (!buf) return 0;
if (!buf) return INT_MAX;
MultiByteToWideChar(cv.page, MB_ERR_INVALID_CHARS, src, src_len, buf, len);
len = LCMapStringW(lcid, LCMAP_SORTKEY, buf, len, (WCHAR*)dest, dest_len);
len = LCMapStringW(lcid, LCMAP_SORTKEY, buf, len, NULL, 0);
if (len <= dest_len)
LCMapStringW(lcid, LCMAP_SORTKEY, buf, len, (WCHAR*)dest, dest_len);
heap_free(buf);
return len;
}