Piotr Caban : msvcp90: Added num_get<char> constructors implementation.

Alexandre Julliard julliard at winehq.org
Thu Jun 21 15:03:40 CDT 2012


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

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Jun 21 12:26:02 2012 +0200

msvcp90: Added num_get<char> constructors implementation.

---

 dlls/msvcp90/locale.c |   48 ++++++++++++++++++++++++++++++++++++++----------
 1 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c
index 94b3384..103b084 100644
--- a/dlls/msvcp90/locale.c
+++ b/dlls/msvcp90/locale.c
@@ -4412,7 +4412,8 @@ extern const vtable_ptr MSVCP_num_get_char_vtable;
 DEFINE_THISCALL_WRAPPER(num_get_char__Init, 8)
 void __thiscall num_get_char__Init(num_get *this, const _Locinfo *locinfo)
 {
-    FIXME("(%p %p) stub\n", this, locinfo);
+    TRACE("(%p %p)\n", this, locinfo);
+    _Locinfo__Getcvt(locinfo, &this->cvt);
 }
 
 /* ??0?$num_get at DV?$istreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@QAE at ABV_Locinfo@1 at I@Z */
@@ -4421,8 +4422,13 @@ DEFINE_THISCALL_WRAPPER(num_get_char_ctor_locinfo, 12)
 num_get* __thiscall num_get_char_ctor_locinfo(num_get *this,
         _Locinfo *locinfo, MSVCP_size_t refs)
 {
-    FIXME("(%p %p %lu) stub\n", this, locinfo, refs);
-    return NULL;
+    TRACE("(%p %p %lu)\n", this, locinfo, refs);
+
+    locale_facet_ctor_refs(&this->facet, refs);
+    this->facet.vtable = &MSVCP_num_get_char_vtable;
+
+    num_get_char__Init(this, locinfo);
+    return this;
 }
 
 /* ??0?$num_get at DV?$istreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@QAE at I@Z */
@@ -4430,8 +4436,14 @@ num_get* __thiscall num_get_char_ctor_locinfo(num_get *this,
 DEFINE_THISCALL_WRAPPER(num_get_char_ctor_refs, 8)
 num_get* __thiscall num_get_char_ctor_refs(num_get *this, MSVCP_size_t refs)
 {
-    FIXME("(%p %lu) stub\n", this, refs);
-    return NULL;
+    _Locinfo locinfo;
+
+    TRACE("(%p %lu)\n", this, refs);
+
+    _Locinfo_ctor(&locinfo);
+    num_get_char_ctor_locinfo(this, &locinfo, refs);
+    _Locinfo_dtor(&locinfo);
+    return this;
 }
 
 /* ??_F?$num_get at DV?$istreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@QAEXXZ */
@@ -4439,8 +4451,7 @@ num_get* __thiscall num_get_char_ctor_refs(num_get *this, MSVCP_size_t refs)
 DEFINE_THISCALL_WRAPPER(num_get_char_ctor, 4)
 num_get* __thiscall num_get_char_ctor(num_get *this)
 {
-    FIXME("(%p) stub\n", this);
-    return NULL;
+    return num_get_char_ctor_refs(this, 0);
 }
 
 /* ??1?$num_get at DV?$istreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@MAE at XZ */
@@ -4448,7 +4459,8 @@ num_get* __thiscall num_get_char_ctor(num_get *this)
 DEFINE_THISCALL_WRAPPER(num_get_char_dtor, 4)
 void __thiscall num_get_char_dtor(num_get *this)
 {
-    FIXME("(%p) stub\n", this);
+    TRACE("(%p)\n", this);
+    locale_facet_dtor(&this->facet);
 }
 
 DEFINE_THISCALL_WRAPPER(MSVCP_num_get_char_vector_dtor, 8)
@@ -4475,8 +4487,24 @@ num_get* __thiscall MSVCP_num_get_char_vector_dtor(num_get *this, unsigned int f
 /* ?_Getcat@?$num_get at DV?$istreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@SA_KPEAPEBVfacet at locale@2 at PEBV42@@Z */
 MSVCP_size_t __cdecl num_get_char__Getcat(const locale_facet **facet, const locale *loc)
 {
-    FIXME("(%p %p) stub\n", facet, loc);
-    return -1;
+    TRACE("(%p %p)\n", facet, loc);
+
+    if(facet && !*facet) {
+        _Locinfo locinfo;
+
+        *facet = MSVCRT_operator_new(sizeof(num_get));
+        if(!*facet) {
+            ERR("Out of memory\n");
+            throw_exception(EXCEPTION_BAD_ALLOC, NULL);
+            return 0;
+        }
+
+        _Locinfo_ctor_cstr(&locinfo, MSVCP_basic_string_char_c_str(&loc->ptr->name));
+        num_get_char_ctor_locinfo((num_get*)*facet, &locinfo, 0);
+        _Locinfo_dtor(&locinfo);
+    }
+
+    return LC_NUMERIC;
 }
 
 /* ?_Getffld@?$num_get at DV?$istreambuf_iterator at DU?$char_traits at D@std@@@std@@@std@@ABAHPADAAV?$istreambuf_iterator at DU?$char_traits at D@std@@@2 at 1ABVlocale@2@@Z */




More information about the wine-cvs mailing list