From 38c7a46c5e33c5c50f83b62ea5ac7764c8523426 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Thu, 14 Jun 2012 15:35:45 +0200 Subject: [PATCH] msvcp90: Added basic_fstream implementation. --- dlls/msvcp90/ios.c | 233 ++++++++++++++++++++++++++++++++++++++ dlls/msvcp90/msvcp90.h | 19 ++-- dlls/msvcp90/msvcp90.spec | 70 ++++++------ 3 files changed, 279 insertions(+), 43 deletions(-) diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c index d5949ff8918..7d3a6f1671b 100644 --- a/dlls/msvcp90/ios.c +++ b/dlls/msvcp90/ios.c @@ -243,6 +243,14 @@ typedef struct { */ } basic_ifstream_char; +typedef struct { + basic_iostream_char base; + basic_filebuf_char filebuf; + /* virtual inheritance + * basic_ios_char basic_ios; + */ +} basic_fstream_char; + extern const vtable_ptr MSVCP_iosb_vtable; /* ??_7ios_base@std@@6B@ */ @@ -296,6 +304,13 @@ const int basic_ifstream_char_vbtable[] = {0, sizeof(basic_ifstream_char)}; /* ??_7?$basic_ifstream@DU?$char_traits@D@std@@@std@@6B@ */ extern const vtable_ptr MSVCP_basic_ifstream_char_vtable; +/* ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ */ +const int basic_fstream_char_vbtable1[] = {0, sizeof(basic_fstream_char)}; +/* ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ */ +const int basic_fstream_char_vbtable2[] = {0, sizeof(basic_fstream_char)-FIELD_OFFSET(basic_fstream_char, base.base2)}; +/* ??_7?$basic_fstream@DU?$char_traits@D@std@@@std@@6B@ */ +extern const vtable_ptr MSVCP_basic_fstream_char_vtable; + DEFINE_RTTI_DATA0(iosb, 0, ".?AV?$_Iosb@H@std@@"); DEFINE_RTTI_DATA1(ios_base, 0, &iosb_rtti_base_descriptor, ".?AV?$_Iosb@H@std@@"); DEFINE_RTTI_DATA2(basic_ios_char, 0, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, @@ -332,6 +347,12 @@ DEFINE_RTTI_DATA4(basic_ifstream_char, sizeof(basic_ifstream_char), &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, ".?AV?$basic_ifstream@DU?$char_traits@D@std@@@std@@"); +DEFINE_RTTI_DATA9(basic_fstream_char, sizeof(basic_fstream_char), &basic_istream_char_rtti_base_descriptor, + &basic_istream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor, + &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, + &basic_ostream_char_rtti_base_descriptor, &basic_ios_char_rtti_base_descriptor, + &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, + ".?AV?$basic_fstream@DU?$char_traits@D@std@@@std@@"); #ifndef __GNUC__ void __asm_dummy_vtables(void) { @@ -402,6 +423,7 @@ void __asm_dummy_vtables(void) { __ASM_VTABLE(basic_iostream_char, ""); __ASM_VTABLE(basic_ofstream_char, ""); __ASM_VTABLE(basic_ifstream_char, ""); + __ASM_VTABLE(basic_fstream_char, ""); #ifndef __GNUC__ } #endif @@ -5188,3 +5210,214 @@ basic_filebuf_char* __thiscall basic_ifstream_char_rdbuf(const basic_ifstream_ch TRACE("(%p)\n", this); return (basic_filebuf_char*)&this->filebuf; } + +/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@XZ */ +/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor, 8) +basic_fstream_char* __thiscall basic_fstream_char_ctor(basic_fstream_char *this, MSVCP_bool virt_init) +{ + basic_ios_char *basic_ios; + + TRACE("(%p %d)\n", this, virt_init); + + if(virt_init) { + this->base.base1.vbtable = basic_fstream_char_vbtable1; + this->base.base2.vbtable = basic_fstream_char_vbtable2; + basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); + basic_ios_char_ctor(basic_ios); + }else { + basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); + } + + basic_filebuf_char_ctor(&this->filebuf); + basic_iostream_char_ctor(&this->base, &this->filebuf.base, FALSE); + basic_ios->base.vtable = &MSVCP_basic_fstream_char_vtable; + return this; +} + +/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z */ +/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor_file, 12) +basic_fstream_char* __thiscall basic_fstream_char_ctor_file(basic_fstream_char *this, + FILE *file, MSVCP_bool virt_init) +{ + basic_ios_char *basic_ios; + + TRACE("(%p %p %d)\n", this, file, virt_init); + + if(virt_init) { + this->base.base1.vbtable = basic_fstream_char_vbtable1; + this->base.base2.vbtable = basic_fstream_char_vbtable2; + basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); + basic_ios_char_ctor(basic_ios); + }else { + basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); + } + + basic_filebuf_char_ctor_file(&this->filebuf, file); + basic_iostream_char_ctor(&this->base, &this->filebuf.base, FALSE); + basic_ios->base.vtable = &MSVCP_basic_fstream_char_vtable; + return this; +} + +/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z */ +/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDHH@Z */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor_name, 20) +basic_fstream_char* __thiscall basic_fstream_char_ctor_name(basic_fstream_char *this, + const char *name, int mode, int prot, MSVCP_bool virt_init) +{ + TRACE("(%p %s %d %d %d)\n", this, name, mode, prot, virt_init); + + basic_fstream_char_ctor(this, virt_init); + + if(!basic_filebuf_char_open(&this->filebuf, name, mode, prot)) { + basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); + basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + } + return this; +} + +/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PBGHH@Z */ +/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEBGHH@Z */ +/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PB_WHH@Z */ +/* ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEB_WHH@Z */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_ctor_name_wchar, 20) +basic_fstream_char* __thiscall basic_fstream_char_ctor_name_wchar(basic_fstream_char *this, + const wchar_t *name, int mode, int prot, MSVCP_bool virt_init) +{ + TRACE("(%p %s %d %d %d)\n", this, debugstr_w(name), mode, prot, virt_init); + + basic_fstream_char_ctor(this, virt_init); + + if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode, prot)) { + basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); + basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + } + return this; +} + +/* ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UAE@XZ */ +/* ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_dtor, 4) +void __thiscall basic_fstream_char_dtor(basic_fstream_char *this) +{ + TRACE("(%p)\n", this); + + basic_iostream_char_dtor(&this->base); + basic_filebuf_char_dtor(&this->filebuf); +} + +/* ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ */ +/* ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_vbase_dtor, 4) +void __thiscall basic_fstream_char_vbase_dtor(basic_fstream_char *this) +{ + TRACE("(%p)\n", this); + + basic_fstream_char_dtor(this); + basic_ios_char_dtor(basic_istream_char_get_basic_ios(&this->base.base1)); +} + +DEFINE_THISCALL_WRAPPER(MSVCP_basic_fstream_char_vector_dtor, 8) +basic_fstream_char* __thiscall MSVCP_basic_fstream_char_vector_dtor(basic_ios_char *base, unsigned int flags) +{ + basic_fstream_char *this = (basic_fstream_char *)((char*)base - basic_fstream_char_vbtable1[1] + basic_fstream_char_vbtable1[0]); + + TRACE("(%p %x)\n", this, flags); + + if(flags & 2) { + /* we have an array, with the number of elements stored before the first object */ + int i, *ptr = (int *)this-1; + + for(i=*ptr-1; i>=0; i--) + basic_fstream_char_vbase_dtor(this+i); + MSVCRT_operator_delete(ptr); + } else { + basic_fstream_char_vbase_dtor(this); + if(flags & 1) + MSVCRT_operator_delete(this); + } + + return this; +} + +/* ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ */ +/* ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_close, 4) +void __thiscall basic_fstream_char_close(basic_fstream_char *this) +{ + TRACE("(%p)\n", this); + + if(!basic_filebuf_char_close(&this->filebuf)) { + basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); + basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + } +} + +/* ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBE_NXZ */ +/* ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_is_open, 4) +MSVCP_bool __thiscall basic_fstream_char_is_open(const basic_fstream_char *this) +{ + TRACE("(%p)\n", this); + return basic_filebuf_char_is_open(&this->filebuf); +} + +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDHH@Z */ +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDHH@Z */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_open, 16) +void __thiscall basic_fstream_char_open(basic_fstream_char *this, + const char *name, int mode, int prot) +{ + TRACE("(%p %s %d %d)\n", this, name, mode, prot); + + if(!basic_filebuf_char_open(&this->filebuf, name, mode, prot)) { + basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); + basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + } +} + +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDI@Z */ +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDI@Z */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_open_old, 12) +void __thiscall basic_fstream_char_open_old(basic_fstream_char *this, + const char *name, unsigned int mode) +{ + basic_fstream_char_open(this, name, mode, _SH_DENYNO); +} + +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBGHH@Z */ +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGHH@Z */ +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPB_WHH@Z */ +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WHH@Z */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_open_wchar, 16) +void __thiscall basic_fstream_char_open_wchar(basic_fstream_char *this, + const wchar_t *name, int mode, int prot) +{ + TRACE("(%p %s %d %d)\n", this, debugstr_w(name), mode, prot); + + if(!basic_filebuf_char_open_wchar(&this->filebuf, name, mode, prot)) { + basic_ios_char *basic_ios = basic_istream_char_get_basic_ios(&this->base.base1); + basic_ios_char_setstate(basic_ios, IOSTATE_failbit); + } +} + +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBGI@Z */ +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGI@Z */ +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPB_WI@Z */ +/* ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WI@Z */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_open_wchar_old, 12) +void __thiscall basic_fstream_char_open_wchar_old(basic_fstream_char *this, + const wchar_t *name, unsigned int mode) +{ + basic_fstream_char_open_wchar(this, name, mode, _SH_DENYNO); +} + +/* ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */ +/* ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ */ +DEFINE_THISCALL_WRAPPER(basic_fstream_char_rdbuf, 4) +basic_filebuf_char* __thiscall basic_fstream_char_rdbuf(const basic_fstream_char *this) +{ + TRACE("(%p)\n", this); + return (basic_filebuf_char*)&this->filebuf; +} diff --git a/dlls/msvcp90/msvcp90.h b/dlls/msvcp90/msvcp90.h index 5bceab8ae6a..c7260c21269 100644 --- a/dlls/msvcp90/msvcp90.h +++ b/dlls/msvcp90/msvcp90.h @@ -82,7 +82,7 @@ extern void* (__cdecl *MSVCRT_set_new_handler)(void*); #endif /* _WIN64 */ -#define DEFINE_RTTI_DATA(name, off, base_classes, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, mangled_name) \ +#define DEFINE_RTTI_DATA(name, off, base_classes, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \ static const type_info name ## _type_info = { \ &MSVCP_type_info_vtable, \ NULL, \ @@ -107,6 +107,7 @@ static const rtti_base_array name ## _rtti_base_array = { \ cl6, \ cl7, \ cl8, \ + cl9, \ } \ }; \ \ @@ -126,17 +127,19 @@ const rtti_object_locator name ## _rtti = { \ } #define DEFINE_RTTI_DATA0(name, off, mangled_name) \ - DEFINE_RTTI_DATA(name, off, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, mangled_name) + DEFINE_RTTI_DATA(name, off, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, mangled_name) #define DEFINE_RTTI_DATA1(name, off, cl1, mangled_name) \ - DEFINE_RTTI_DATA(name, off, 1, cl1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, mangled_name) + DEFINE_RTTI_DATA(name, off, 1, cl1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, mangled_name) #define DEFINE_RTTI_DATA2(name, off, cl1, cl2, mangled_name) \ - DEFINE_RTTI_DATA(name, off, 2, cl1, cl2, NULL, NULL, NULL, NULL, NULL, NULL, mangled_name) + DEFINE_RTTI_DATA(name, off, 2, cl1, cl2, NULL, NULL, NULL, NULL, NULL, NULL, NULL, mangled_name) #define DEFINE_RTTI_DATA3(name, off, cl1, cl2, cl3, mangled_name) \ - DEFINE_RTTI_DATA(name, off, 3, cl1, cl2, cl3, NULL, NULL, NULL, NULL, NULL, mangled_name) + DEFINE_RTTI_DATA(name, off, 3, cl1, cl2, cl3, NULL, NULL, NULL, NULL, NULL, NULL, mangled_name) #define DEFINE_RTTI_DATA4(name, off, cl1, cl2, cl3, cl4, mangled_name) \ - DEFINE_RTTI_DATA(name, off, 4, cl1, cl2, cl3, cl4, NULL, NULL, NULL, NULL, mangled_name) + DEFINE_RTTI_DATA(name, off, 4, cl1, cl2, cl3, cl4, NULL, NULL, NULL, NULL, NULL, mangled_name) #define DEFINE_RTTI_DATA8(name, off, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, mangled_name) \ - DEFINE_RTTI_DATA(name, off, 8, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, mangled_name) + DEFINE_RTTI_DATA(name, off, 8, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, NULL, mangled_name) +#define DEFINE_RTTI_DATA9(name, off, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \ + DEFINE_RTTI_DATA(name, off, 9, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) #ifdef __i386__ @@ -216,7 +219,7 @@ typedef struct _rtti_base_descriptor typedef struct _rtti_base_array { - const rtti_base_descriptor *bases[9]; /* First element is the class itself */ + const rtti_base_descriptor *bases[10]; /* First element is the class itself */ } rtti_base_array; typedef struct _rtti_object_hierarchy diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index d1931aa5797..a7014bfe32c 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -558,16 +558,16 @@ @ stub -arch=win64 ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAA@PEAU_iobuf@@@Z @ stub -arch=win32 ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAE@W4_Uninitialized@1@@Z @ stub -arch=win64 ??0?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAA@W4_Uninitialized@1@@Z -@ stub -arch=win32 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z -@ stub -arch=win64 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z -@ stub -arch=win32 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z -@ stub -arch=win64 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDHH@Z -@ stub -arch=win32 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PBGHH@Z -@ stub -arch=win64 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEBGHH@Z -@ stub -arch=win32 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PB_WHH@Z -@ stub -arch=win64 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEB_WHH@Z -@ stub -arch=win32 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@XZ -@ stub -arch=win64 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@XZ +@ thiscall -arch=win32 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z(ptr ptr long) basic_fstream_char_ctor_file +@ cdecl -arch=win64 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEAU_iobuf@@@Z(ptr ptr long) basic_fstream_char_ctor_file +@ thiscall -arch=win32 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PBDHH@Z(ptr str long long long) basic_fstream_char_ctor_name +@ cdecl -arch=win64 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEBDHH@Z(ptr str long long long) basic_fstream_char_ctor_name +@ thiscall -arch=win32 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PBGHH@Z(ptr ptr long long long) basic_fstream_char_ctor_name_wchar +@ cdecl -arch=win64 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEBGHH@Z(ptr ptr long long long) basic_fstream_char_ctor_name_wchar +@ thiscall -arch=win32 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@PB_WHH@Z(ptr wstr long long long) basic_fstream_char_ctor_name_wchar +@ cdecl -arch=win64 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@PEB_WHH@Z(ptr wstr long long long) basic_fstream_char_ctor_name_wchar +@ thiscall -arch=win32 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QAE@XZ(ptr long) basic_fstream_char_ctor +@ cdecl -arch=win64 ??0?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAA@XZ(ptr long) basic_fstream_char_ctor @ stub -arch=win32 ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z @ stub -arch=win64 ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAA@PEAU_iobuf@@@Z @ stub -arch=win32 ??0?$basic_fstream@GU?$char_traits@G@std@@@std@@QAE@PBDHH@Z @@ -1152,8 +1152,8 @@ @ stub -arch=win64 ??1?$basic_filebuf@GU?$char_traits@G@std@@@std@@UEAA@XZ @ stub -arch=win32 ??1?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@UAE@XZ @ stub -arch=win64 ??1?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@UEAA@XZ -@ stub -arch=win32 ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UAE@XZ -@ stub -arch=win64 ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UEAA@XZ +@ thiscall -arch=win32 ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UAE@XZ(ptr) basic_fstream_char_dtor +@ cdecl -arch=win64 ??1?$basic_fstream@DU?$char_traits@D@std@@@std@@UEAA@XZ(ptr) basic_fstream_char_dtor @ stub -arch=win32 ??1?$basic_fstream@GU?$char_traits@G@std@@@std@@UAE@XZ @ stub -arch=win64 ??1?$basic_fstream@GU?$char_traits@G@std@@@std@@UEAA@XZ @ stub -arch=win32 ??1?$basic_fstream@_WU?$char_traits@_W@std@@@std@@UAE@XZ @@ -1782,7 +1782,7 @@ @ extern ??_7?$basic_filebuf@DU?$char_traits@D@std@@@std@@6B@ MSVCP_basic_filebuf_char_vtable # extern ??_7?$basic_filebuf@GU?$char_traits@G@std@@@std@@6B@ # extern ??_7?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@6B@ -# extern ??_7?$basic_fstream@DU?$char_traits@D@std@@@std@@6B@ +@ extern ??_7?$basic_fstream@DU?$char_traits@D@std@@@std@@6B@ MSVCP_basic_fstream_char_vtable # extern ??_7?$basic_fstream@GU?$char_traits@G@std@@@std@@6B@ # extern ??_7?$basic_fstream@_WU?$char_traits@_W@std@@@std@@6B@ @ extern ??_7?$basic_ifstream@DU?$char_traits@D@std@@@std@@6B@ MSVCP_basic_ifstream_char_vtable @@ -1865,8 +1865,8 @@ # extern ??_7money_base@std@@6B@ # extern ??_7strstreambuf@std@@6B@ # extern ??_7time_base@std@@6B@ -# extern ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ -# extern ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ +@ extern ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_istream@DU?$char_traits@D@std@@@1@@ basic_fstream_char_vbtable1 +@ extern ??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@ basic_fstream_char_vbtable2 # extern ??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@ # extern ??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@ # extern ??_8?$basic_fstream@_WU?$char_traits@_W@std@@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@ @@ -1901,8 +1901,8 @@ # extern ??_8?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@ # extern ??_8?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@7B?$basic_istream@_WU?$char_traits@_W@std@@@1@@ # extern ??_8?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@7B?$basic_ostream@_WU?$char_traits@_W@std@@@1@@ -@ stub -arch=win32 ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ -@ stub -arch=win64 ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ +@ thiscall -arch=win32 ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ(ptr) basic_fstream_char_vbase_dtor +@ cdecl -arch=win64 ??_D?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ(ptr) basic_fstream_char_vbase_dtor @ stub -arch=win32 ??_D?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXXZ @ stub -arch=win64 ??_D?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXXZ @ stub -arch=win32 ??_D?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ @@ -3090,8 +3090,8 @@ @ stub -arch=win64 ?close@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEAAPEAV12@XZ @ stub -arch=win32 ?close@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@XZ @ stub -arch=win64 ?close@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@XZ -@ stub -arch=win32 ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ -@ stub -arch=win64 ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ +@ thiscall -arch=win32 ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXXZ(ptr) basic_fstream_char_close +@ cdecl -arch=win64 ?close@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXXZ(ptr) basic_fstream_char_close @ stub -arch=win32 ?close@?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXXZ @ stub -arch=win64 ?close@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXXZ @ stub -arch=win32 ?close@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QAEXXZ @@ -4409,8 +4409,8 @@ @ stub -arch=win64 ?is_open@?$basic_filebuf@GU?$char_traits@G@std@@@std@@QEBA_NXZ @ stub -arch=win32 ?is_open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QBE_NXZ @ stub -arch=win64 ?is_open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEBA_NXZ -@ stub -arch=win32 ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBE_NXZ -@ stub -arch=win64 ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ +@ thiscall -arch=win32 ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBE_NXZ(ptr) basic_fstream_char_is_open +@ cdecl -arch=win64 ?is_open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBA_NXZ(ptr) basic_fstream_char_is_open @ stub -arch=win32 ?is_open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QBE_NXZ @ stub -arch=win64 ?is_open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEBA_NXZ @ stub -arch=win32 ?is_open@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QBE_NXZ @@ -4631,18 +4631,18 @@ @ stub -arch=win64 ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEB_WHH@Z @ stub -arch=win32 ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QAEPAV12@PB_WI@Z @ stub -arch=win64 ?open@?$basic_filebuf@_WU?$char_traits@_W@std@@@std@@QEAAPEAV12@PEB_WI@Z -@ stub -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDHH@Z -@ stub -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDHH@Z -@ stub -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDI@Z -@ stub -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDI@Z -@ stub -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBGHH@Z -@ stub -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGHH@Z -@ stub -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBGI@Z -@ stub -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGI@Z -@ stub -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPB_WHH@Z -@ stub -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WHH@Z -@ stub -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPB_WI@Z -@ stub -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WI@Z +@ thiscall -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDHH@Z(ptr str long long) basic_fstream_char_open +@ cdecl -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDHH@Z(ptr str long long) basic_fstream_char_open +@ thiscall -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBDI@Z(ptr str long) basic_fstream_char_open_old +@ cdecl -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBDI@Z(ptr str long) basic_fstream_char_open_old +@ thiscall -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBGHH@Z(ptr ptr long long) basic_fstream_char_open_wchar +@ cdecl -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGHH@Z(ptr ptr long long) basic_fstream_char_open_wchar +@ thiscall -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPBGI@Z(ptr ptr long) basic_fstream_char_open_wchar_old +@ cdecl -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEBGI@Z(ptr ptr long) basic_fstream_char_open_wchar_old +@ thiscall -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPB_WHH@Z(ptr wstr long long) basic_fstream_char_open_wchar +@ cdecl -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WHH@Z(ptr wstr long long) basic_fstream_char_open_wchar +@ thiscall -arch=win32 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QAEXPB_WI@Z(ptr wstr long) basic_fstream_char_open_wchar_old +@ cdecl -arch=win64 ?open@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEAAXPEB_WI@Z(ptr wstr long) basic_fstream_char_open_wchar_old @ stub -arch=win32 ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXPBDHH@Z @ stub -arch=win64 ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEAAXPEBDHH@Z @ stub -arch=win32 ?open@?$basic_fstream@GU?$char_traits@G@std@@@std@@QAEXPBDI@Z @@ -5013,8 +5013,8 @@ @ cdecl -arch=win64 ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAA?AV?$reverse_iterator@V?$_String_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ(ptr ptr) MSVCP_basic_string_wchar_rbegin @ thiscall -arch=win32 ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$reverse_iterator@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ(ptr ptr) MSVCP_basic_string_wchar_rbegin @ cdecl -arch=win64 ?rbegin@?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$reverse_iterator@V?$_String_const_iterator@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@@2@XZ(ptr ptr) MSVCP_basic_string_wchar_rbegin -@ stub -arch=win32 ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ -@ stub -arch=win64 ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ +@ thiscall -arch=win32 ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QBEPAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ(ptr) basic_fstream_char_rdbuf +@ cdecl -arch=win64 ?rdbuf@?$basic_fstream@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_filebuf@DU?$char_traits@D@std@@@2@XZ(ptr) basic_fstream_char_rdbuf @ stub -arch=win32 ?rdbuf@?$basic_fstream@GU?$char_traits@G@std@@@std@@QBEPAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ @ stub -arch=win64 ?rdbuf@?$basic_fstream@GU?$char_traits@G@std@@@std@@QEBAPEAV?$basic_filebuf@GU?$char_traits@G@std@@@2@XZ @ stub -arch=win32 ?rdbuf@?$basic_fstream@_WU?$char_traits@_W@std@@@std@@QBEPAV?$basic_filebuf@_WU?$char_traits@_W@std@@@2@XZ