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.