On 06/06/16 13:52, Iván Matellanes wrote:
DEFINE_THISCALL_WRAPPER(ostream_copy_ctor, 12) ostream* __thiscall ostream_copy_ctor(ostream *this, const ostream *copy, BOOL virt_init) { - FIXME("(%p %p %d) stub\n", this, copy, virt_init); + ios *base, *copy_base; + + TRACE("(%p %p %d)\n", this, copy, virt_init); + + if (virt_init) + this->vbtable = ostream_vbtable; + base = ostream_get_ios(this); + copy_base = ostream_get_ios(copy); + ios_sb_ctor(base, copy_base->sb); + base->vtable = &MSVCP_ostream_vtable; This is wrong if virt_init == FALSE. There should be something like: copy_base = ostream_get_ios(copy); if (virt_init) { this->vbtable = ostream_vbtable; base = ostream_get_ios(thjs); ios_sb_ctor(base, copy_base->sb); } else { base = ostream_get_ios(this); ios_init(base, copy_base->sb); }
Keep in mind that this code was not tested. Please also add a test for ostream_copy_ctor(..., FALSE) call. Thanks, Piotr