Piotr Caban : msvcp90: Correctly initialize vtable pointer in Getcat functions.

Alexandre Julliard julliard at winehq.org
Fri Dec 23 13:03:23 CST 2011


Module: wine
Branch: master
Commit: 5b93bb9800c87d1cab247d57b6bc794bd4f28615
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5b93bb9800c87d1cab247d57b6bc794bd4f28615

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Fri Dec 23 15:29:31 2011 +0100

msvcp90: Correctly initialize vtable pointer in Getcat functions.

---

 dlls/msvcp90/locale.c     |   28 ++++++++++++++++++++++++----
 dlls/msvcp90/msvcp90.spec |    8 ++++----
 2 files changed, 28 insertions(+), 8 deletions(-)

diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c
index ad44aad..8ed46ea 100644
--- a/dlls/msvcp90/locale.c
+++ b/dlls/msvcp90/locale.c
@@ -996,8 +996,6 @@ collate* __thiscall collate_short_ctor(collate *this)
 
 /* ?_Getcat@?$collate at _W@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z */
 /* ?_Getcat@?$collate at _W@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z */
-/* ?_Getcat@?$collate at G@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z */
-/* ?_Getcat@?$collate at G@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z */
 MSVCP_size_t __cdecl collate_wchar__Getcat(const locale_facet **facet, const locale *loc)
 {
     TRACE("(%p %p)\n", facet, loc);
@@ -1016,6 +1014,18 @@ MSVCP_size_t __cdecl collate_wchar__Getcat(const locale_facet **facet, const loc
     return LC_COLLATE;
 }
 
+/* ?_Getcat@?$collate at G@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z */
+/* ?_Getcat@?$collate at G@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z */
+MSVCP_size_t __cdecl collate_short__Getcat(const locale_facet **facet, const locale *loc)
+{
+    if(facet && !*facet) {
+        collate_wchar__Getcat(facet, loc);
+        (*(locale_facet**)facet)->vtable = &MSVCP_collate_short_vtable;
+    }
+
+    return LC_COLLATE;
+}
+
 /* _Wcscoll */
 int __cdecl _Wcscoll(const wchar_t *first1, const wchar_t *last1, const wchar_t *first2,
         const wchar_t *last2, const _Collvec *coll)
@@ -2142,8 +2152,6 @@ const char* __thiscall ctype_wchar__Widen_s(const ctype_wchar *this,
 
 /* ?_Getcat@?$ctype at _W@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z */
 /* ?_Getcat@?$ctype at _W@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z */
-/* ?_Getcat@?$ctype at G@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z */
-/* ?_Getcat@?$ctype at G@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z */
 MSVCP_size_t __cdecl ctype_wchar__Getcat(const locale_facet **facet, const locale *loc)
 {
     TRACE("(%p %p)\n", facet, loc);
@@ -2166,6 +2174,18 @@ MSVCP_size_t __cdecl ctype_wchar__Getcat(const locale_facet **facet, const local
     return LC_CTYPE;
 }
 
+/* ?_Getcat@?$ctype at G@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z */
+/* ?_Getcat@?$ctype at G@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z */
+MSVCP_size_t __cdecl ctype_short__Getcat(const locale_facet **facet, const locale *loc)
+{
+    if(facet && !*facet) {
+        ctype_wchar__Getcat(facet, loc);
+        (*(locale_facet**)facet)->vtable = &MSVCP_ctype_short_vtable;
+    }
+
+    return LC_CTYPE;
+}
+
 /* _Towlower */
 wchar_t __cdecl _Towlower(wchar_t ch, const _Ctypevec *ctype)
 {
diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec
index 750e279..292e91c 100644
--- a/dlls/msvcp90/msvcp90.spec
+++ b/dlls/msvcp90/msvcp90.spec
@@ -2229,14 +2229,14 @@
 @ stub -arch=win64 ?_Getcat@?$codecvt at _WDH@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z
 @ cdecl -arch=win32 ?_Getcat@?$collate at D@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z(ptr ptr) collate_char__Getcat
 @ cdecl -arch=win64 ?_Getcat@?$collate at D@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z(ptr ptr) collate_char__Getcat
-@ cdecl -arch=win32 ?_Getcat@?$collate at G@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z(ptr ptr) collate_wchar__Getcat
-@ cdecl -arch=win64 ?_Getcat@?$collate at G@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z(ptr ptr) collate_wchar__Getcat
+@ cdecl -arch=win32 ?_Getcat@?$collate at G@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z(ptr ptr) collate_short__Getcat
+@ cdecl -arch=win64 ?_Getcat@?$collate at G@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z(ptr ptr) collate_short__Getcat
 @ cdecl -arch=win32 ?_Getcat@?$collate at _W@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z(ptr ptr) collate_wchar__Getcat
 @ cdecl -arch=win64 ?_Getcat@?$collate at _W@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z(ptr ptr) collate_wchar__Getcat
 @ cdecl -arch=win32 ?_Getcat@?$ctype at D@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z(ptr ptr) ctype_char__Getcat
 @ cdecl -arch=win64 ?_Getcat@?$ctype at D@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z(ptr ptr) ctype_char__Getcat
-@ cdecl -arch=win32 ?_Getcat@?$ctype at G@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z(ptr ptr) ctype_wchar__Getcat
-@ cdecl -arch=win64 ?_Getcat@?$ctype at G@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z(ptr ptr) ctype_wchar__Getcat
+@ cdecl -arch=win32 ?_Getcat@?$ctype at G@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z(ptr ptr) ctype_short__Getcat
+@ cdecl -arch=win64 ?_Getcat@?$ctype at G@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z(ptr ptr) ctype_short__Getcat
 @ cdecl -arch=win32 ?_Getcat@?$ctype at _W@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z(ptr ptr) ctype_wchar__Getcat
 @ cdecl -arch=win64 ?_Getcat@?$ctype at _W@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z(ptr ptr) ctype_wchar__Getcat
 @ stub -arch=win32 ?_Getcat@?$messages at D@std@@SAIPAPBVfacet at locale@2 at PBV42@@Z




More information about the wine-cvs mailing list