From c17c54318a552606ab6430770caf082c37346bd4 Mon Sep 17 00:00:00 2001 From: Daniel Lehman Date: Mon, 22 Jun 2015 17:43:56 -0700 Subject: [PATCH] msvcp90: Set _Locimp vtable in _Locimp ctors (Valgrind). --- dlls/msvcp90/locale.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c index b975741737a..9b8532291a3 100644 --- a/dlls/msvcp90/locale.c +++ b/dlls/msvcp90/locale.c @@ -9966,6 +9966,9 @@ istreambuf_iterator_char* __thiscall time_get_char_get_year(const time_get_char return call_time_get_char_do_get_year(this, ret, s, e, base, err, t); } +/* ??_7_Locimp@locale@std@@6B@ */ +extern const vtable_ptr MSVCP_locale__Locimp_vtable; + /* ??0_Locimp@locale@std@@AAE@_N@Z */ /* ??0_Locimp@locale@std@@AEAA@_N@Z */ DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent, 8) @@ -9975,6 +9978,7 @@ locale__Locimp* __thiscall locale__Locimp_ctor_transparent(locale__Locimp *this, memset(this, 0, sizeof(locale__Locimp)); locale_facet_ctor_refs(&this->facet, 1); + this->facet.vtable = &MSVCP_locale__Locimp_vtable; this->transparent = transparent; locale_string_char_ctor_cstr(&this->name, "*"); return this; @@ -10001,6 +10005,7 @@ locale__Locimp* __thiscall locale__Locimp_copy_ctor(locale__Locimp *this, const _Lockit_ctor_locktype(&lock, _LOCK_LOCALE); memcpy(this, copy, sizeof(locale__Locimp)); locale_facet_ctor_refs(&this->facet, 1); + this->facet.vtable = &MSVCP_locale__Locimp_vtable; if(copy->facetvec) { this->facetvec = MSVCRT_operator_new(copy->facet_cnt*sizeof(locale_facet*)); if(!this->facetvec) { @@ -10560,11 +10565,6 @@ locale__Locimp* __cdecl locale__Locimp__Makeloc(const _Locinfo *locinfo, categor return locimp; } -/* ??_7_Locimp@locale@std@@6B@ */ -const vtable_ptr MSVCP_locale__Locimp_vtable[] = { - (vtable_ptr)THISCALL_NAME(locale__Locimp_vector_dtor) -}; - /* ??0locale@std@@AAE@PAV_Locimp@01@@Z */ /* ??0locale@std@@AEAA@PEAV_Locimp@01@@Z */ DEFINE_THISCALL_WRAPPER(locale_ctor_locimp, 8) @@ -11066,6 +11066,7 @@ size_t __cdecl wcsrtombs(char *dst, const wchar_t **pstr, size_t n, mbstate_t *s DEFINE_RTTI_DATA0(locale_facet, 0, ".?AVfacet@locale@std@@") +DEFINE_RTTI_DATA1(locale__Locimp, 0, &locale_facet_rtti_base_descriptor, ".?AV_Locimp@locale@std@@") DEFINE_RTTI_DATA1(collate_char, 0, &locale_facet_rtti_base_descriptor, ".?AV?$collate@D@std@@") DEFINE_RTTI_DATA1(collate_wchar, 0, &locale_facet_rtti_base_descriptor, ".?AV?$collate@_W@std@@") DEFINE_RTTI_DATA1(collate_short, 0, &locale_facet_rtti_base_descriptor, ".?AV?$collate@G@std@@") @@ -11102,6 +11103,13 @@ void __asm_dummy_vtables(void) { VTABLE_ADD_FUNC(locale_facet__Decref) #endif ); + __ASM_VTABLE(locale__Locimp, + VTABLE_ADD_FUNC(locale__Locimp_vector_dtor) +#if _MSVCP_VER >= 110 + VTABLE_ADD_FUNC(locale_facet__Incref) + VTABLE_ADD_FUNC(locale_facet__Decref) +#endif + ); __ASM_VTABLE(collate_char, VTABLE_ADD_FUNC(collate_char_vector_dtor) #if _MSVCP_VER >= 110 @@ -11425,6 +11433,7 @@ void init_locale(void *base) { #ifdef __x86_64__ init_locale_facet_rtti(base); + init_locale__Locimp_rtti(base); init_collate_char_rtti(base); init_collate_wchar_rtti(base); init_collate_short_rtti(base); -- 2.11.4.GIT