From f143f3e6bc74eb491a38530fd35ebc356fdf633b Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 15 Aug 2012 10:26:58 +0200 Subject: [PATCH] msvcp90: Added partial strstreambuf implementation. --- dlls/msvcp90/ios.c | 357 ++++++++++++++++++++++++++++++++++++++++++++++ dlls/msvcp90/msvcp90.spec | 82 +++++------ 2 files changed, 398 insertions(+), 41 deletions(-) diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c index 1cea7988bf7..a053103b912 100644 --- a/dlls/msvcp90/ios.c +++ b/dlls/msvcp90/ios.c @@ -254,6 +254,23 @@ typedef struct { */ } basic_stringstream_wchar; +typedef enum { + STRSTATE_Allocated = 1, + STRSTATE_Constant = 2, + STRSTATE_Dynamic = 4, + STRSTATE_Frozen = 8 +} strstreambuf__Strstate; + +typedef struct { + basic_streambuf_char base; + streamsize minsize; + char *endsave; + char *seekhigh; + int strmode; + void* (__cdecl *palloc)(MSVCP_size_t); + void (__cdecl *pfree)(void*); +} strstreambuf; + extern const vtable_ptr MSVCP_iosb_vtable; /* ??_7ios_base@std@@6B@ */ @@ -442,6 +459,9 @@ const int basic_stringstream_short_vbtable2[] = {0, sizeof(basic_stringstream_wc /* ??_7?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@6B@ */ extern const vtable_ptr MSVCP_basic_stringstream_short_vtable; +/* ??_7strstreambuf@std@@6B */ +extern const vtable_ptr MSVCP_strstreambuf_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, @@ -588,6 +608,8 @@ DEFINE_RTTI_DATA8(basic_stringstream_short, sizeof(basic_stringstream_wchar), &basic_ostream_short_rtti_base_descriptor, &basic_ios_short_rtti_base_descriptor, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, ".?AV?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@"); +DEFINE_RTTI_DATA1(strstreambuf, sizeof(strstreambuf), + &basic_streambuf_char_rtti_base_descriptor, ".?AVstrstreambuf@std@@"); #ifndef __GNUC__ void __asm_dummy_vtables(void) { @@ -750,6 +772,20 @@ void __asm_dummy_vtables(void) { __ASM_VTABLE(basic_stringstream_char, ""); __ASM_VTABLE(basic_stringstream_wchar, ""); __ASM_VTABLE(basic_stringstream_short, ""); + __ASM_VTABLE(strstreambuf, + VTABLE_ADD_FUNC(strstreambuf_overflow) + VTABLE_ADD_FUNC(strstreambuf_pbackfail) + VTABLE_ADD_FUNC(basic_streambuf_char_showmanyc) + VTABLE_ADD_FUNC(strstreambuf_underflow) + VTABLE_ADD_FUNC(basic_streambuf_char_uflow) + VTABLE_ADD_FUNC(basic_streambuf_char_xsgetn) + VTABLE_ADD_FUNC(basic_streambuf_char__Xsgetn_s) + VTABLE_ADD_FUNC(basic_streambuf_char_xsputn) + VTABLE_ADD_FUNC(strstreambuf_seekoff) + VTABLE_ADD_FUNC(strstreambuf_seekpos) + VTABLE_ADD_FUNC(basic_streambuf_char_setbuf) + VTABLE_ADD_FUNC(basic_streambuf_char_sync) + VTABLE_ADD_FUNC(basic_streambuf_char_imbue)); #ifndef __GNUC__ } #endif @@ -12402,6 +12438,327 @@ basic_string_wchar* __thiscall basic_stringstream_wchar_str_get(const basic_stri return basic_stringbuf_wchar_str_get(&this->strbuf, ret); } +/* ?_Init@strstreambuf@std@@IAEXHPAD0H@Z */ +/* ?_Init@strstreambuf@std@@IEAAX_JPEAD1H@Z */ +DEFINE_THISCALL_WRAPPER(strstreambuf__Init, 20) +void __thiscall strstreambuf__Init(strstreambuf *this, streamsize len, char *g, char *p, int mode) +{ + TRACE("(%p %ld %p %p %d)\n", this, len, g, p, mode); + + this->minsize = 32; + this->endsave = NULL; + this->strmode = mode; + this->palloc = NULL; + this->pfree = NULL; + + if(!g) { + this->strmode |= STRSTATE_Dynamic; + if(len > this->minsize) + this->minsize = len; + this->seekhigh = NULL; + return; + } + + if(len < 0) + len = INT_MAX; + else if(!len) + len = strlen(g); + + this->seekhigh = g+len; + basic_streambuf_char_setg(&this->base, g, g, p ? p : this->seekhigh); + if(p) + basic_streambuf_char_setp(&this->base, p, this->seekhigh); +} + +/* ??0strstreambuf@std@@QAE@PACH0@Z */ +/* ??0strstreambuf@std@@QEAA@PEAC_J0@Z */ +/* ??0strstreambuf@std@@QAE@PADH0@Z */ +/* ??0strstreambuf@std@@QEAA@PEAD_J0@Z */ +/* ??0strstreambuf@std@@QAE@PAEH0@Z */ +/* ??0strstreambuf@std@@QEAA@PEAE_J0@Z */ +DEFINE_THISCALL_WRAPPER(strstreambuf_ctor_get_put, 16) +strstreambuf* __thiscall strstreambuf_ctor_get_put(strstreambuf *this, char *g, streamsize len, char *p) +{ + TRACE("(%p %p %ld %p)\n", this, g, len, p); + + basic_streambuf_char_ctor(&this->base); + this->base.vtable = &MSVCP_strstreambuf_vtable; + + strstreambuf__Init(this, len, g, p, 0); + return this; +} + +/* ??0strstreambuf@std@@QAE@H@Z */ +/* ??0strstreambuf@std@@QEAA@_J@Z */ +DEFINE_THISCALL_WRAPPER(strstreambuf_ctor_len, 8) +strstreambuf* __thiscall strstreambuf_ctor_len(strstreambuf *this, streamsize len) +{ + return strstreambuf_ctor_get_put(this, NULL, len, NULL); +} + +/* ??0strstreambuf@std@@QAE@P6APAXI@ZP6AXPAX@Z@Z */ +/* ??0strstreambuf@std@@QEAA@P6APEAX_K@ZP6AXPEAX@Z@Z */ +DEFINE_THISCALL_WRAPPER(strstreambuf_ctor_alloc, 12) +strstreambuf* __thiscall strstreambuf_ctor_alloc(strstreambuf *this, void* (__cdecl *palloc)(MSVCP_size_t), void (__cdecl *pfree)(void*)) +{ + TRACE("(%p %p %p)\n", this, palloc, pfree); + + strstreambuf_ctor_get_put(this, NULL, 0, NULL); + this->palloc = palloc; + this->pfree = pfree; + return this; +} + +/* ??0strstreambuf@std@@QAE@PBCH@Z */ +/* ??0strstreambuf@std@@QEAA@PEBC_J@Z */ +/* ??0strstreambuf@std@@QAE@PBDH@Z */ +/* ??0strstreambuf@std@@QEAA@PEBD_J@Z */ +/* ??0strstreambuf@std@@QAE@PBEH@Z */ +/* ??0strstreambuf@std@@QEAA@PEBE_J@Z */ +DEFINE_THISCALL_WRAPPER(strstreambuf_ctor_get, 12) +strstreambuf* __thiscall strstreambuf_ctor_get(strstreambuf *this, const char *g, streamsize len) +{ + TRACE("(%p %p %ld)\n", this, g, len); + + strstreambuf_ctor_get_put(this, NULL, 0, NULL); + this->strmode |= STRSTATE_Constant; + return this; +} + +/* ??_Fstrstreambuf@std@@QAEXXZ */ +/* ??_Fstrstreambuf@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(strstreambuf_ctor, 4) +strstreambuf* __thiscall strstreambuf_ctor(strstreambuf *this) +{ + return strstreambuf_ctor_get_put(this, NULL, 0, NULL); +} + +/* ?_Tidy@strstreambuf@std@@IAEXXZ */ +/* ?_Tidy@strstreambuf@std@@IEAAXXZ */ +DEFINE_THISCALL_WRAPPER(strstreambuf__Tidy, 4) +void __thiscall strstreambuf__Tidy(strstreambuf *this) +{ + TRACE("(%p)\n", this); + + if((this->strmode & STRSTATE_Allocated) && !(this->strmode & STRSTATE_Frozen)) { + if(this->pfree) + this->pfree(basic_streambuf_char_eback(&this->base)); + else + MSVCRT_operator_delete(basic_streambuf_char_eback(&this->base)); + } + + this->endsave = NULL; + this->seekhigh = NULL; + this->strmode &= ~(STRSTATE_Allocated | STRSTATE_Frozen); + basic_streambuf_char_setg(&this->base, NULL, NULL, NULL); + basic_streambuf_char_setp(&this->base, NULL, NULL); +} + +/* ??1strstreambuf@std@@UAE@XZ */ +/* ??1strstreambuf@std@@UEAA@XZ */ +DEFINE_THISCALL_WRAPPER(strstreambuf_dtor, 4) +void __thiscall strstreambuf_dtor(strstreambuf *this) +{ + TRACE("(%p)\n", this); + + strstreambuf__Tidy(this); + basic_streambuf_char_dtor(&this->base); +} + +DEFINE_THISCALL_WRAPPER(MSVCP_strstreambuf_vector_dtor, 8) +strstreambuf* __thiscall MSVCP_strstreambuf_vector_dtor(strstreambuf *this, unsigned int flags) +{ + 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--) + strstreambuf_dtor(this+i); + MSVCRT_operator_delete(ptr); + } else { + strstreambuf_dtor(this); + if(flags & 1) + MSVCRT_operator_delete(this); + } + + return this; +} + +/* ?freeze@strstreambuf@std@@QAEX_N@Z */ +/* ?freeze@strstreambuf@std@@QEAAX_N@Z */ +DEFINE_THISCALL_WRAPPER(strstreambuf_freeze, 8) +void __thiscall strstreambuf_freeze(strstreambuf *this, MSVCP_bool freeze) +{ + TRACE("(%p %d)\n", this, freeze); + + if(!freeze == !(this->strmode *STRSTATE_Frozen)) + return; + + if(freeze) { + this->strmode |= STRSTATE_Frozen; + this->endsave = basic_streambuf_char_epptr(&this->base); + basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base), + basic_streambuf_char_pptr(&this->base), basic_streambuf_char_eback(&this->base)); + }else { + this->strmode &= ~STRSTATE_Frozen; + basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base), + basic_streambuf_char_pptr(&this->base), this->endsave); + } +} + +/* ?str@strstreambuf@std@@QAEPADXZ */ +/* ?str@strstreambuf@std@@QEAAPEADXZ */ +DEFINE_THISCALL_WRAPPER(strstreambuf_str, 4) +char* __thiscall strstreambuf_str(strstreambuf *this) +{ + TRACE("(%p)\n", this); + + strstreambuf_freeze(this, TRUE); + return basic_streambuf_char_gptr(&this->base); +} + +/* ?pcount@strstreambuf@std@@QBEHXZ */ +/* ?pcount@strstreambuf@std@@QEBA_JXZ */ +DEFINE_THISCALL_WRAPPER(strstreambuf_pcount, 4) +streamsize __thiscall strstreambuf_pcount(const strstreambuf *this) +{ + char *ppos = basic_streambuf_char_pptr(&this->base); + + TRACE("(%p)\n", this); + + return ppos ? ppos-basic_streambuf_char_pbase(&this->base) : 0; +} + +/* ?overflow@strstreambuf@std@@MAEHH@Z */ +/* ?overflow@strstreambuf@std@@MEAAHH@Z */ +DEFINE_THISCALL_WRAPPER(strstreambuf_overflow, 8) +int __thiscall strstreambuf_overflow(strstreambuf *this, int c) +{ + MSVCP_size_t old_size, size; + char *ptr, *buf; + + TRACE("(%p %d)\n", this, c); + + if(c == EOF) + return !EOF; + + if(this->strmode & STRSTATE_Frozen) + return EOF; + + ptr = basic_streambuf_char_pptr(&this->base); + if(ptr && ptrbase)) + return (unsigned char)(*basic_streambuf_char__Pninc(&this->base) = c); + + if(!(this->strmode & STRSTATE_Dynamic) || (this->strmode & STRSTATE_Constant)) + return EOF; + + ptr = basic_streambuf_char_eback(&this->base); + old_size = ptr ? basic_streambuf_char_epptr(&this->base) - ptr : 0; + + size = old_size + old_size/2; + if(size < this->minsize) + size = this->minsize; + + if(this->palloc) + buf = this->palloc(size); + else + buf = MSVCRT_operator_new(size); + if(!buf) + return EOF; + + memcpy(buf, ptr, old_size); + if(this->strmode & STRSTATE_Allocated) { + if(this->pfree) + this->pfree(ptr); + else + MSVCRT_operator_delete(ptr); + } + + this->strmode |= STRSTATE_Allocated; + if(!old_size) { + this->seekhigh = buf; + basic_streambuf_char_setp(&this->base, buf, buf+size); + basic_streambuf_char_setg(&this->base, buf, buf, buf); + }else { + this->seekhigh = this->seekhigh-ptr+buf; + basic_streambuf_char_setp_next(&this->base, basic_streambuf_char_pbase(&this->base)-ptr+buf, + basic_streambuf_char_pptr(&this->base)-ptr+buf, buf+size); + basic_streambuf_char_setg(&this->base, buf, basic_streambuf_char_gptr(&this->base)-ptr+buf, + basic_streambuf_char_pptr(&this->base)); + } + + return (unsigned char)(*basic_streambuf_char__Pninc(&this->base) = c); +} + +/* ?pbackfail@strstreambuf@std@@MAEHH@Z */ +/* ?pbackfail@strstreambuf@std@@MEAAHH@Z */ +DEFINE_THISCALL_WRAPPER(strstreambuf_pbackfail, 8) +int __thiscall strstreambuf_pbackfail(strstreambuf *this, int c) +{ + char *ptr = basic_streambuf_char_gptr(&this->base); + + TRACE("(%p %d)\n", this, c); + + if(ptr<=basic_streambuf_char_eback(&this->base) + || ((this->strmode & STRSTATE_Constant) && c!=ptr[-1])) + return EOF; + + basic_streambuf_char_gbump(&this->base, -1); + if(c == EOF) + return !EOF; + if(this->strmode & STRSTATE_Constant) + return (unsigned char)c; + + return (unsigned char)(ptr[0] = c); +} + +/* ?seekoff@strstreambuf@std@@MAE?AV?$fpos@H@2@JHH@Z */ +/* ?seekoff@strstreambuf@std@@MEAA?AV?$fpos@H@2@_JHH@Z */ +DEFINE_THISCALL_WRAPPER(strstreambuf_seekoff, 20) +fpos_int* __thiscall strstreambuf_seekoff(strstreambuf *this, fpos_int *ret, streamoff off, int way, int mode) +{ + FIXME("(%p %p %ld %d %d) stub\n", this, ret, off, way, mode); + return NULL; +} + +/* ?seekpos@strstreambuf@std@@MAE?AV?$fpos@H@2@V32@H@Z */ +/* ?seekpos@strstreambuf@std@@MEAA?AV?$fpos@H@2@V32@H@Z */ +DEFINE_THISCALL_WRAPPER(strstreambuf_seekpos, 36) +fpos_int* __thiscall strstreambuf_seekpos(strstreambuf *this, fpos_int *ret, fpos_int pos, int mode) +{ + FIXME("(%p %p %s %d) stub\n", this, ret, debugstr_fpos_int(&pos), mode); + return NULL; +} + +/* ?underflow@strstreambuf@std@@MAEHXZ */ +/* ?underflow@strstreambuf@std@@MEAAHXZ */ +DEFINE_THISCALL_WRAPPER(strstreambuf_underflow, 4) +int __thiscall strstreambuf_underflow(strstreambuf *this) +{ + char *gptr = basic_streambuf_char_gptr(&this->base); + char *pptr; + + TRACE("(%p)\n", this); + + if(!gptr) + return EOF; + + if(gptr < basic_streambuf_char_egptr(&this->base)) + return (unsigned char)(*gptr); + + pptr = basic_streambuf_char_gptr(&this->base); + if(pptr > this->seekhigh) + this->seekhigh = pptr; + + if(this->seekhigh <= gptr) + return EOF; + + basic_streambuf_char_setg(&this->base, basic_streambuf_char_eback(&this->base), + gptr, this->seekhigh); + return (unsigned char)(*gptr); +} + static void __cdecl setprecision_func(ios_base *base, streamsize prec) { ios_base_precision_set(base, prec); diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index 25a1eadbd92..3b41cbd4222 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -1122,22 +1122,22 @@ @ stub -arch=win64 ??0messages_base@std@@QEAA@_K@Z @ stub -arch=win32 ??0money_base@std@@QAE@I@Z @ stub -arch=win64 ??0money_base@std@@QEAA@_K@Z -@ stub -arch=win32 ??0strstreambuf@std@@QAE@H@Z -@ stub -arch=win64 ??0strstreambuf@std@@QEAA@P6APEAX_K@ZP6AXPEAX@Z@Z -@ stub -arch=win32 ??0strstreambuf@std@@QAE@P6APAXI@ZP6AXPAX@Z@Z -@ stub -arch=win64 ??0strstreambuf@std@@QEAA@PEAC_J0@Z -@ stub -arch=win32 ??0strstreambuf@std@@QAE@PACH0@Z -@ stub -arch=win64 ??0strstreambuf@std@@QEAA@PEAD_J0@Z -@ stub -arch=win32 ??0strstreambuf@std@@QAE@PADH0@Z -@ stub -arch=win64 ??0strstreambuf@std@@QEAA@PEAE_J0@Z -@ stub -arch=win32 ??0strstreambuf@std@@QAE@PAEH0@Z -@ stub -arch=win64 ??0strstreambuf@std@@QEAA@PEBC_J@Z -@ stub -arch=win32 ??0strstreambuf@std@@QAE@PBCH@Z -@ stub -arch=win64 ??0strstreambuf@std@@QEAA@PEBD_J@Z -@ stub -arch=win32 ??0strstreambuf@std@@QAE@PBDH@Z -@ stub -arch=win64 ??0strstreambuf@std@@QEAA@PEBE_J@Z -@ stub -arch=win32 ??0strstreambuf@std@@QAE@PBEH@Z -@ stub -arch=win64 ??0strstreambuf@std@@QEAA@_J@Z +@ thiscall -arch=win32 ??0strstreambuf@std@@QAE@H@Z(ptr long) strstreambuf_ctor_len +@ cdecl -arch=win64 ??0strstreambuf@std@@QEAA@P6APEAX_K@ZP6AXPEAX@Z@Z(ptr ptr ptr) strstreambuf_ctor_alloc +@ thiscall -arch=win32 ??0strstreambuf@std@@QAE@P6APAXI@ZP6AXPAX@Z@Z(ptr ptr ptr) strstreambuf_ctor_alloc +@ cdecl -arch=win64 ??0strstreambuf@std@@QEAA@PEAC_J0@Z(ptr ptr long ptr) strstreambuf_ctor_get_put +@ thiscall -arch=win32 ??0strstreambuf@std@@QAE@PACH0@Z(ptr ptr long ptr) strstreambuf_ctor_get_put +@ cdecl -arch=win64 ??0strstreambuf@std@@QEAA@PEAD_J0@Z(ptr ptr long ptr) strstreambuf_ctor_get_put +@ thiscall -arch=win32 ??0strstreambuf@std@@QAE@PADH0@Z(ptr ptr long ptr) strstreambuf_ctor_get_put +@ cdecl -arch=win64 ??0strstreambuf@std@@QEAA@PEAE_J0@Z(ptr ptr long ptr) strstreambuf_ctor_get_put +@ thiscall -arch=win32 ??0strstreambuf@std@@QAE@PAEH0@Z(ptr ptr long ptr) strstreambuf_ctor_get_put +@ cdecl -arch=win64 ??0strstreambuf@std@@QEAA@PEBC_J@Z(ptr ptr long) strstreambuf_ctor_get +@ thiscall -arch=win32 ??0strstreambuf@std@@QAE@PBCH@Z(ptr ptr long) strstreambuf_ctor_get +@ cdecl -arch=win64 ??0strstreambuf@std@@QEAA@PEBD_J@Z(ptr str long) strstreambuf_ctor_get +@ thiscall -arch=win32 ??0strstreambuf@std@@QAE@PBDH@Z(ptr str long) strstreambuf_ctor_get +@ cdecl -arch=win64 ??0strstreambuf@std@@QEAA@PEBE_J@Z(ptr ptr long) strstreambuf_ctor_get +@ thiscall -arch=win32 ??0strstreambuf@std@@QAE@PBEH@Z(ptr ptr long) strstreambuf_ctor_get +@ cdecl -arch=win64 ??0strstreambuf@std@@QEAA@_J@Z(ptr long) strstreambuf_ctor_len @ stub -arch=win32 ??0time_base@std@@QAE@I@Z @ stub -arch=win64 ??0time_base@std@@QEAA@_K@Z @ stub -arch=win32 ??1?$_Mpunct@D@std@@MAE@XZ @@ -1340,8 +1340,8 @@ @ stub -arch=win64 ??1messages_base@std@@UEAA@XZ @ stub -arch=win32 ??1money_base@std@@UAE@XZ @ stub -arch=win64 ??1money_base@std@@UEAA@XZ -@ stub -arch=win32 ??1strstreambuf@std@@UAE@XZ -@ stub -arch=win64 ??1strstreambuf@std@@UEAA@XZ +@ thiscall -arch=win32 ??1strstreambuf@std@@UAE@XZ(ptr) strstreambuf_dtor +@ cdecl -arch=win64 ??1strstreambuf@std@@UEAA@XZ(ptr) strstreambuf_dtor @ stub -arch=win32 ??1time_base@std@@UAE@XZ @ stub -arch=win64 ??1time_base@std@@UEAA@XZ @ stub -arch=win32 ??4?$_Allocator_base@D@std@@QAEAAU01@ABU01@@Z @@ -1863,7 +1863,7 @@ @ extern ??_7ios_base@std@@6B@ MSVCP_ios_base_vtable # extern ??_7messages_base@std@@6B@ # extern ??_7money_base@std@@6B@ -# extern ??_7strstreambuf@std@@6B@ +@ extern ??_7strstreambuf@std@@6B@ MSVCP_strstreambuf_vtable # extern ??_7time_base@std@@6B@ @ 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 @@ -2093,8 +2093,8 @@ @ stub -arch=win64 ??_Fmessages_base@std@@QEAAXXZ @ stub -arch=win32 ??_Fmoney_base@std@@QAEXXZ @ stub -arch=win64 ??_Fmoney_base@std@@QEAAXXZ -@ stub -arch=win32 ??_Fstrstreambuf@std@@QAEXXZ -@ stub -arch=win64 ??_Fstrstreambuf@std@@QEAAXXZ +@ thiscall -arch=win32 ??_Fstrstreambuf@std@@QAEXXZ(ptr) strstreambuf_ctor +@ cdecl -arch=win64 ??_Fstrstreambuf@std@@QEAAXXZ(ptr) strstreambuf_ctor @ stub -arch=win32 ??_Ftime_base@std@@QAEXXZ @ stub -arch=win64 ??_Ftime_base@std@@QEAAXXZ @ thiscall -arch=win32 ?_Addcats@_Locinfo@std@@QAEAAV12@HPBD@Z(ptr long str) _Locinfo__Addcats @@ -2528,8 +2528,8 @@ @ cdecl -arch=win64 ?_Init@ios_base@std@@IEAAXXZ(ptr) ios_base_Init @ cdecl -arch=win32 ?_Init@locale@std@@CAPAV_Locimp@12@XZ() locale__Init @ cdecl -arch=win64 ?_Init@locale@std@@CAPEAV_Locimp@12@XZ() locale__Init -@ stub -arch=win32 ?_Init@strstreambuf@std@@IAEXHPAD0H@Z -@ stub -arch=win64 ?_Init@strstreambuf@std@@IEAAX_JPEAD1H@Z +@ thiscall -arch=win32 ?_Init@strstreambuf@std@@IAEXHPAD0H@Z(ptr long ptr ptr long) strstreambuf__Init +@ cdecl -arch=win64 ?_Init@strstreambuf@std@@IEAAX_JPEAD1H@Z(ptr long ptr ptr long) strstreambuf__Init # extern ?_Init_cnt@Init@ios_base@std@@0HA # extern ?_Init_cnt@_UShinit@std@@0HA # extern ?_Init_cnt@_Winit@std@@0HA @@ -2836,8 +2836,8 @@ @ stub -arch=win64 ?_Tidy@?$time_get@_WV?$istreambuf_iterator@_WU?$char_traits@_W@std@@@std@@@std@@AEAAXXZ @ cdecl -arch=win32 ?_Tidy@ios_base@std@@AAAXXZ(ptr) ios_base_Tidy @ cdecl -arch=win64 ?_Tidy@ios_base@std@@AEAAXXZ(ptr) ios_base_Tidy -@ stub -arch=win32 ?_Tidy@strstreambuf@std@@IAEXXZ -@ stub -arch=win64 ?_Tidy@strstreambuf@std@@IEAAXXZ +@ thiscall -arch=win32 ?_Tidy@strstreambuf@std@@IAEXXZ(ptr) strstreambuf__Tidy +@ cdecl -arch=win64 ?_Tidy@strstreambuf@std@@IEAAXXZ(ptr) strstreambuf__Tidy @ thiscall -arch=win32 ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QAEXXZ(ptr) basic_streambuf_char__Unlock @ cdecl -arch=win64 ?_Unlock@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAXXZ(ptr) basic_streambuf_char__Unlock @ thiscall -arch=win32 ?_Unlock@?$basic_streambuf@GU?$char_traits@G@std@@@std@@QAEXXZ(ptr) basic_streambuf_wchar__Unlock @@ -3965,8 +3965,8 @@ @ stub -arch=win64 ?frac_digits@?$_Mpunct@G@std@@QEBAHXZ @ stub -arch=win32 ?frac_digits@?$_Mpunct@_W@std@@QBEHXZ @ stub -arch=win64 ?frac_digits@?$_Mpunct@_W@std@@QEBAHXZ -@ stub -arch=win32 ?freeze@strstreambuf@std@@QAEX_N@Z -@ stub -arch=win64 ?freeze@strstreambuf@std@@QEAAX_N@Z +@ thiscall -arch=win32 ?freeze@strstreambuf@std@@QAEX_N@Z(ptr long) strstreambuf_freeze +@ cdecl -arch=win64 ?freeze@strstreambuf@std@@QEAAX_N@Z(ptr long) strstreambuf_freeze @ thiscall -arch=win32 ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXH@Z(ptr long) basic_streambuf_char_gbump @ cdecl -arch=win64 ?gbump@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEAAXH@Z(ptr long) basic_streambuf_char_gbump @ thiscall -arch=win32 ?gbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IAEXH@Z(ptr long) basic_streambuf_wchar_gbump @@ -4781,8 +4781,8 @@ @ cdecl -arch=win64 ?overflow@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAAGG@Z(ptr long) basic_stringbuf_wchar_overflow @ thiscall -arch=win32 ?overflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAEGG@Z(ptr long) basic_stringbuf_wchar_overflow @ cdecl -arch=win64 ?overflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAAGG@Z(ptr long) basic_stringbuf_wchar_overflow -@ stub -arch=win32 ?overflow@strstreambuf@std@@MAEHH@Z -@ stub -arch=win64 ?overflow@strstreambuf@std@@MEAAHH@Z +@ thiscall -arch=win32 ?overflow@strstreambuf@std@@MAEHH@Z(ptr long) strstreambuf_overflow +@ cdecl -arch=win64 ?overflow@strstreambuf@std@@MEAAHH@Z(ptr long) strstreambuf_overflow @ thiscall -arch=win32 ?pbackfail@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAEHH@Z(ptr long) basic_filebuf_char_pbackfail @ cdecl -arch=win64 ?pbackfail@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MEAAHH@Z(ptr long) basic_filebuf_char_pbackfail @ thiscall -arch=win32 ?pbackfail@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAEGG@Z(ptr long) basic_filebuf_wchar_pbackfail @@ -4801,8 +4801,8 @@ @ cdecl -arch=win64 ?pbackfail@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAAGG@Z(ptr long) basic_stringbuf_wchar_pbackfail @ thiscall -arch=win32 ?pbackfail@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAEGG@Z(ptr long) basic_stringbuf_wchar_pbackfail @ cdecl -arch=win64 ?pbackfail@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAAGG@Z(ptr long) basic_stringbuf_wchar_pbackfail -@ stub -arch=win32 ?pbackfail@strstreambuf@std@@MAEHH@Z -@ stub -arch=win64 ?pbackfail@strstreambuf@std@@MEAAHH@Z +@ thiscall -arch=win32 ?pbackfail@strstreambuf@std@@MAEHH@Z(ptr long) strstreambuf_pbackfail +@ cdecl -arch=win64 ?pbackfail@strstreambuf@std@@MEAAHH@Z(ptr long) strstreambuf_pbackfail @ thiscall -arch=win32 ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ(ptr) basic_streambuf_char_pbase @ cdecl -arch=win64 ?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IEBAPEADXZ(ptr) basic_streambuf_char_pbase @ thiscall -arch=win32 ?pbase@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IBEPAGXZ(ptr) basic_streambuf_wchar_pbase @@ -4815,8 +4815,8 @@ @ cdecl -arch=win64 ?pbump@?$basic_streambuf@GU?$char_traits@G@std@@@std@@IEAAXH@Z(ptr long) basic_streambuf_wchar_pbump @ thiscall -arch=win32 ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IAEXH@Z(ptr long) basic_streambuf_wchar_pbump @ cdecl -arch=win64 ?pbump@?$basic_streambuf@_WU?$char_traits@_W@std@@@std@@IEAAXH@Z(ptr long) basic_streambuf_wchar_pbump -@ stub -arch=win32 ?pcount@strstreambuf@std@@QBEHXZ -@ stub -arch=win64 ?pcount@strstreambuf@std@@QEBA_JXZ +@ thiscall -arch=win32 ?pcount@strstreambuf@std@@QBEHXZ(ptr) strstreambuf_pcount +@ cdecl -arch=win64 ?pcount@strstreambuf@std@@QEBA_JXZ(ptr) strstreambuf_pcount @ thiscall -arch=win32 ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEHXZ(ptr) basic_istream_char_peek @ cdecl -arch=win64 ?peek@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ(ptr) basic_istream_char_peek @ thiscall -arch=win32 ?peek@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEGXZ(ptr) basic_istream_wchar_peek @@ -5276,8 +5276,8 @@ @ cdecl -arch=win64 ?seekoff@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAA?AV?$fpos@H@2@_JHH@Z(ptr ptr long long long) basic_stringbuf_wchar_seekoff @ thiscall -arch=win32 ?seekoff@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAE?AV?$fpos@H@2@JHH@Z(ptr ptr long long long) basic_stringbuf_wchar_seekoff @ cdecl -arch=win64 ?seekoff@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAA?AV?$fpos@H@2@_JHH@Z(ptr ptr long long long) basic_stringbuf_wchar_seekoff -@ stub -arch=win32 ?seekoff@strstreambuf@std@@MAE?AV?$fpos@H@2@JHH@Z -@ stub -arch=win64 ?seekoff@strstreambuf@std@@MEAA?AV?$fpos@H@2@_JHH@Z +@ thiscall -arch=win32 ?seekoff@strstreambuf@std@@MAE?AV?$fpos@H@2@JHH@Z(ptr ptr long long long) strstreambuf_seekoff +@ cdecl -arch=win64 ?seekoff@strstreambuf@std@@MEAA?AV?$fpos@H@2@_JHH@Z(ptr ptr long long long) strstreambuf_seekoff @ thiscall -arch=win32 ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@JH@Z(ptr long long) basic_ostream_char_seekp @ cdecl -arch=win64 ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@V?$fpos@H@2@@Z(ptr ptr) basic_ostream_char_seekp_fpos @ thiscall -arch=win32 ?seekp@?$basic_ostream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z(ptr long long int64 long long) basic_ostream_char_seekp_fpos @@ -5308,8 +5308,8 @@ @ cdecl -arch=win64 ?seekpos@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAA?AV?$fpos@H@2@V32@H@Z(ptr ptr ptr long) basic_stringbuf_wchar_seekpos @ thiscall -arch=win32 ?seekpos@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAE?AV?$fpos@H@2@V32@H@Z(ptr ptr long long int64 long long long) basic_stringbuf_wchar_seekpos @ cdecl -arch=win64 ?seekpos@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAA?AV?$fpos@H@2@V32@H@Z(ptr ptr ptr long) basic_stringbuf_wchar_seekpos -@ stub -arch=win32 ?seekpos@strstreambuf@std@@MAE?AV?$fpos@H@2@V32@H@Z -@ stub -arch=win64 ?seekpos@strstreambuf@std@@MEAA?AV?$fpos@H@2@V32@H@Z +@ thiscall -arch=win32 ?seekpos@strstreambuf@std@@MAE?AV?$fpos@H@2@V32@H@Z(ptr ptr long long int64 long long long) strstreambuf_seekpos +@ cdecl -arch=win64 ?seekpos@strstreambuf@std@@MEAA?AV?$fpos@H@2@V32@H@Z(ptr ptr ptr long) strstreambuf_seekpos @ cdecl ?set_new_handler@std@@YAP6AXXZH@Z(long) set_new_handler_reset @ cdecl ?set_new_handler@std@@YAP6AXXZP6AXXZ@Z(ptr) set_new_handler @ stub ?setbase@std@@YA?AU?$_Smanip@H@1@H@Z @@ -5494,8 +5494,8 @@ @ cdecl -arch=win64 ?str@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEAAXAEBV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@@Z(ptr ptr) basic_stringstream_wchar_str_set @ thiscall -arch=win32 ?str@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ(ptr ptr) basic_stringstream_wchar_str_get @ cdecl -arch=win64 ?str@?$basic_stringstream@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@QEBA?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@XZ(ptr ptr) basic_stringstream_wchar_str_get -@ stub -arch=win32 ?str@strstreambuf@std@@QAEPADXZ -@ stub -arch=win64 ?str@strstreambuf@std@@QEAAPEADXZ +@ thiscall -arch=win32 ?str@strstreambuf@std@@QAEPADXZ(ptr) strstreambuf_str +@ cdecl -arch=win64 ?str@strstreambuf@std@@QEAAPEADXZ(ptr) strstreambuf_str @ thiscall -arch=win32 ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV12@II@Z(ptr ptr long long) MSVCP_basic_string_char_substr @ cdecl -arch=win64 ?substr@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QEBA?AV12@_K0@Z(ptr ptr long long) MSVCP_basic_string_char_substr @ thiscall -arch=win32 ?substr@?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV12@II@Z(ptr ptr long long) MSVCP_basic_string_wchar_substr @@ -5659,8 +5659,8 @@ @ cdecl -arch=win64 ?underflow@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@MEAAGXZ(ptr) basic_stringbuf_wchar_underflow @ thiscall -arch=win32 ?underflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MAEGXZ(ptr) basic_stringbuf_wchar_underflow @ cdecl -arch=win64 ?underflow@?$basic_stringbuf@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@std@@MEAAGXZ(ptr) basic_stringbuf_wchar_underflow -@ stub -arch=win32 ?underflow@strstreambuf@std@@MAEHXZ -@ stub -arch=win64 ?underflow@strstreambuf@std@@MEAAHXZ +@ thiscall -arch=win32 ?underflow@strstreambuf@std@@MAEHXZ(ptr) strstreambuf_underflow +@ cdecl -arch=win64 ?underflow@strstreambuf@std@@MEAAHXZ(ptr) strstreambuf_underflow @ thiscall -arch=win32 ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@XZ(ptr) basic_istream_char_unget @ cdecl -arch=win64 ?unget@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ(ptr) basic_istream_char_unget @ thiscall -arch=win32 ?unget@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@XZ(ptr) basic_istream_wchar_unget -- 2.11.4.GIT