Hi,

On 04/16/12 02:50, William Panlener wrote:
  typedef struct {
+   locale_facet facet;
+   /* FIXME: type definition in standard but var here */
+   enum { ok, partial, error, noconv } result;
+} codecvt_base;
This structure has incorrect size. It should not contain result variable.

+typedef struct {
+   codecvt_base base;
+   /* FIXME: incomplete struct definition */
+} codecvt_char_char_mbstate;
It's better to define whole structure. Also other structures are named differently, it would be probably better to name it codecvt_char.

+typedef struct {
+   codecvt_base base;
+   /* FIXME: incomplete struct definition */
+} codecvt_short_char_mbstate;
+
+typedef struct {
+   codecvt_base base;
+   /* FIXME: incomplete struct definition */
+} codecvt_wchar_char_mbstate;
There's no reason to define separate structures for unsigned short and wchar_t variants of the class. Probably the only difference between this classes is typeinfo structure.

+/* FIXME: Potentially unused */
+/* ?id@?$codecvt@DDH@std@@2V0locale@2@A */
+locale_id codecvt_char_char_mbstate_id = {0};
I don't understand this comment. The id fields will be used by locale class.

+/* ??1codecvt_base@std@@UAE@XZ */
+/* ??1codecvt_base@std@@UEAA@XZ */
+DEFINE_THISCALL_WRAPPER(codecvt_base_dtor, 4)
+void __thiscall codecvt_base_dtor(codecvt_base *this)
+{
+    FIXME("(%p)\n stub!", this);
+    TRACE("(%p)\n", this);
+}
There's no need to use both FIXME and TRACE.

+/* ??1?$codecvt@DDH@std@@MAE@XZ */
+/* ??1?$codecvt@DDH@std@@MEAA@XZ */
+DEFINE_THISCALL_WRAPPER(codecvt_char_char_mbstate_dtor, 4)
+void __thiscall codecvt_char_char_mbstate_dtor(codecvt_char_char_mbstate *this)
+{
+    /*FIXME stub*/
+    codecvt_base_dtor(&this->base);
+    TRACE("(%p)\n", this);
+}
It's better to print a fixme message here.

+DEFINE_RTTI_DATA(codecvt_char_char_mbstate, 0, 1,&locale_facet_rtti_base_descriptor, 
NULL, NULL, " ?AV?$codecvt@DDH@std@@");
+DEFINE_RTTI_DATA(codecvt_short_char_mbstate, 0, 1,&locale_facet_rtti_base_descriptor, 
NULL, NULL, " ?AV?$codecvt@GDH@std@@");
+DEFINE_RTTI_DATA(codecvt_wchar_char_mbstate, 0, 1,&locale_facet_rtti_base_descriptor, 
NULL, NULL, ".?AV?$codecvt@_WDH@std@@");
The RTTI data for these structures is incorrect.

+    __ASM_VTABLE(codecvt_base, ""/*FIXME*/);
+    __ASM_VTABLE(codecvt_char_char_mbstate, ""/*FIXME*/);
+    __ASM_VTABLE(codecvt_short_char_mbstate, ""/*FIXME*/);
+    __ASM_VTABLE(codecvt_wchar_char_mbstate, ""/*FIXME*/);
It's better to create correct virtual functions table. This may lead to some strange crashes.


Reply via email to