[01/10] msvcirt: Add stub of class strstreambuf

Iván Matellanes matellanesivan at gmail.com
Sun Sep 13 10:43:50 CDT 2015


---
 dlls/msvcirt/msvcirt.c      | 214 ++++++++++++++++++++++++++++++++++++++++----
 dlls/msvcirt/msvcirt.h      |   2 +
 dlls/msvcirt/msvcirt.spec   |  70 +++++++--------
 dlls/msvcrt20/msvcrt20.spec |  62 ++++++-------
 dlls/msvcrt40/msvcrt40.spec |  62 ++++++-------
 5 files changed, 298 insertions(+), 112 deletions(-)

diff --git a/dlls/msvcirt/msvcirt.c b/dlls/msvcirt/msvcirt.c
index ff31e8c..460d69a 100644
--- a/dlls/msvcirt/msvcirt.c
+++ b/dlls/msvcirt/msvcirt.c
@@ -106,6 +106,17 @@ typedef struct {
 
 filebuf* __thiscall filebuf_close(filebuf*);
 
+/* class strstreambuf */
+typedef struct {
+    streambuf base;
+    int dynamic;
+    int increase;
+    int unknown;
+    int constant;
+    allocFunction f_alloc;
+    freeFunction f_free;
+} strstreambuf;
+
 /* class ios */
 struct _ostream;
 typedef struct {
@@ -136,14 +147,12 @@ typedef struct _ostream {
     const vtable_ptr *vtable;
 } ostream;
 
-typedef struct {
-    LPVOID VTable;
-} class_strstreambuf;
-
 /* ??_7streambuf@@6B@ */
 extern const vtable_ptr MSVCP_streambuf_vtable;
 /* ??_7filebuf@@6B@ */
 extern const vtable_ptr MSVCP_filebuf_vtable;
+/* ??_7strstreambuf@@6B@ */
+extern const vtable_ptr MSVCP_strstreambuf_vtable;
 /* ??_7ios@@6B@ */
 extern const vtable_ptr MSVCP_ios_vtable;
 
@@ -174,6 +183,18 @@ void __asm_dummy_vtables(void) {
             VTABLE_ADD_FUNC(filebuf_underflow)
             VTABLE_ADD_FUNC(streambuf_pbackfail)
             VTABLE_ADD_FUNC(streambuf_doallocate));
+    __ASM_VTABLE(strstreambuf,
+            VTABLE_ADD_FUNC(strstreambuf_vector_dtor)
+            VTABLE_ADD_FUNC(strstreambuf_sync)
+            VTABLE_ADD_FUNC(strstreambuf_setbuf)
+            VTABLE_ADD_FUNC(strstreambuf_seekoff)
+            VTABLE_ADD_FUNC(streambuf_seekpos)
+            VTABLE_ADD_FUNC(streambuf_xsputn)
+            VTABLE_ADD_FUNC(streambuf_xsgetn)
+            VTABLE_ADD_FUNC(strstreambuf_overflow)
+            VTABLE_ADD_FUNC(strstreambuf_underflow)
+            VTABLE_ADD_FUNC(streambuf_pbackfail)
+            VTABLE_ADD_FUNC(strstreambuf_doallocate));
     __ASM_VTABLE(ios,
             VTABLE_ADD_FUNC(ios_vector_dtor));
 #ifndef __GNUC__
@@ -182,6 +203,7 @@ void __asm_dummy_vtables(void) {
 
 DEFINE_RTTI_DATA0(streambuf, 0, ".?AVstreambuf@@")
 DEFINE_RTTI_DATA1(filebuf, 0, &streambuf_rtti_base_descriptor, ".?AVfilebuf@@")
+DEFINE_RTTI_DATA1(strstreambuf, 0, &streambuf_rtti_base_descriptor, ".?AVstrstreambuf@@")
 DEFINE_RTTI_DATA0(ios, 0, ".?AVios@@")
 
 /* ??0streambuf@@IAE at PADH@Z */
@@ -1112,6 +1134,178 @@ int __thiscall filebuf_underflow(filebuf *this)
     return *this->base.gptr;
 }
 
+/* ??0strstreambuf@@QAE at ABV0@@Z */
+/* ??0strstreambuf@@QEAA at AEBV0@@Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_copy_ctor, 8)
+strstreambuf* __thiscall strstreambuf_copy_ctor(strstreambuf *this, const strstreambuf *copy)
+{
+    FIXME("(%p %p) stub\n", this, copy);
+    return this;
+}
+
+/* ??0strstreambuf@@QAE at H@Z */
+/* ??0strstreambuf@@QEAA at H@Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_dynamic_ctor, 8)
+strstreambuf* __thiscall strstreambuf_dynamic_ctor(strstreambuf* this, int length)
+{
+    FIXME("(%p %d) stub\n", this, length);
+    return this;
+}
+
+/* ??0strstreambuf@@QAE at P6APAXJ@ZP6AXPAX at Z@Z */
+/* ??0strstreambuf@@QEAA at P6APEAXJ@ZP6AXPEAX at Z@Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_funcs_ctor, 12)
+strstreambuf* __thiscall strstreambuf_funcs_ctor(strstreambuf* this, allocFunction falloc, freeFunction ffree)
+{
+    FIXME("(%p %p %p) stub\n", this, falloc, ffree);
+    return this;
+}
+
+/* ??0strstreambuf@@QAE at PADH0@Z */
+/* ??0strstreambuf@@QEAA at PEADH0@Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_buffer_ctor, 16)
+strstreambuf* __thiscall strstreambuf_buffer_ctor(strstreambuf *this, char *buffer, int length, char *put)
+{
+    FIXME("(%p %p %d %p) stub\n", this, buffer, length, put);
+    return this;
+}
+
+/* ??0strstreambuf@@QAE at PAEH0@Z */
+/* ??0strstreambuf@@QEAA at PEAEH0@Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_ubuffer_ctor, 16)
+strstreambuf* __thiscall strstreambuf_ubuffer_ctor(strstreambuf *this, unsigned char *buffer, int length, unsigned char *put)
+{
+    FIXME("(%p %p %d %p) stub\n", this, buffer, length, put);
+    return this;
+}
+
+/* ??0strstreambuf@@QAE at XZ */
+/* ??0strstreambuf@@QEAA at XZ */
+DEFINE_THISCALL_WRAPPER(strstreambuf_ctor, 4)
+strstreambuf* __thiscall strstreambuf_ctor(strstreambuf *this)
+{
+    FIXME("(%p) stub\n", this);
+    return this;
+}
+
+/* ??1strstreambuf@@UAE at XZ */
+/* ??1strstreambuf@@UEAA at XZ */
+DEFINE_THISCALL_WRAPPER(strstreambuf_dtor, 4)
+void __thiscall strstreambuf_dtor(strstreambuf *this)
+{
+    FIXME("(%p) stub\n", this);
+}
+
+/* ??4strstreambuf@@QAEAAV0 at ABV0@@Z */
+/* ??4strstreambuf@@QEAAAEAV0 at AEBV0@@Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_assign, 8)
+strstreambuf* __thiscall strstreambuf_assign(strstreambuf *this, const strstreambuf *rhs)
+{
+    strstreambuf_dtor(this);
+    return strstreambuf_copy_ctor(this, rhs);
+}
+
+/* ??_Estrstreambuf@@UAEPAXI at Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_vector_dtor, 8)
+strstreambuf* __thiscall 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_PTR i, *ptr = (INT_PTR *)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;
+}
+
+/* ??_Gstrstreambuf@@UAEPAXI at Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_scalar_dtor, 8)
+strstreambuf* __thiscall strstreambuf_scalar_dtor(strstreambuf *this, unsigned int flags)
+{
+    TRACE("(%p %x)\n", this, flags);
+    strstreambuf_dtor(this);
+    if (flags & 1) MSVCRT_operator_delete(this);
+    return this;
+}
+
+/* ?doallocate at strstreambuf@@MAEHXZ */
+/* ?doallocate at strstreambuf@@MEAAHXZ */
+DEFINE_THISCALL_WRAPPER(strstreambuf_doallocate, 4)
+int __thiscall strstreambuf_doallocate(strstreambuf *this)
+{
+    FIXME("(%p) stub\n", this);
+    return EOF;
+}
+
+/* ?freeze at strstreambuf@@QAEXH at Z */
+/* ?freeze at strstreambuf@@QEAAXH at Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_freeze, 8)
+void __thiscall strstreambuf_freeze(strstreambuf *this, int frozen)
+{
+    FIXME("(%p %d) stub\n", this, frozen);
+}
+
+/* ?overflow at strstreambuf@@UAEHH at Z */
+/* ?overflow at strstreambuf@@UEAAHH at Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_overflow, 8)
+int __thiscall strstreambuf_overflow(strstreambuf *this, int c)
+{
+    FIXME("(%p %d) stub\n", this, c);
+    return EOF;
+}
+
+/* ?seekoff at strstreambuf@@UAEJJW4seek_dir at ios@@H at Z */
+/* ?seekoff at strstreambuf@@UEAAJJW4seek_dir at ios@@H at Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_seekoff, 16)
+streampos __thiscall strstreambuf_seekoff(strstreambuf *this, streamoff offset, ios_seek_dir dir, int mode)
+{
+    FIXME("(%p %d %d %d) stub\n", this, offset, dir, mode);
+    return EOF;
+}
+
+/* ?setbuf at strstreambuf@@UAEPAVstreambuf@@PADH at Z */
+/* ?setbuf at strstreambuf@@UEAAPEAVstreambuf@@PEADH at Z */
+DEFINE_THISCALL_WRAPPER(strstreambuf_setbuf, 12)
+streambuf* __thiscall strstreambuf_setbuf(strstreambuf *this, char *buffer, int length)
+{
+    FIXME("(%p %p %d) stub\n", this, buffer, length);
+    return NULL;
+}
+
+/* ?str at strstreambuf@@QAEPADXZ */
+/* ?str at strstreambuf@@QEAAPEADXZ */
+DEFINE_THISCALL_WRAPPER(strstreambuf_str, 4)
+char* __thiscall strstreambuf_str(strstreambuf *this)
+{
+    FIXME("(%p) stub\n", this);
+    return NULL;
+}
+
+/* ?sync at strstreambuf@@UAEHXZ */
+/* ?sync at strstreambuf@@UEAAHXZ */
+DEFINE_THISCALL_WRAPPER(strstreambuf_sync, 4)
+int __thiscall strstreambuf_sync(strstreambuf *this)
+{
+    FIXME("(%p) stub\n", this);
+    return EOF;
+}
+
+/* ?underflow at strstreambuf@@UAEHXZ */
+/* ?underflow at strstreambuf@@UEAAHXZ */
+DEFINE_THISCALL_WRAPPER(strstreambuf_underflow, 4)
+int __thiscall strstreambuf_underflow(strstreambuf *this)
+{
+    FIXME("(%p) stub\n", this);
+    return EOF;
+}
+
 /* ??0ios@@IAE at ABV0@@Z */
 /* ??0ios@@IEAA at AEBV0@@Z */
 DEFINE_THISCALL_WRAPPER(ios_copy_ctor, 8)
@@ -1723,17 +1917,6 @@ void * CDECL MSVCIRT_ends(ostream * _this)
    return _this;
 }
 
-/******************************************************************
- *		?str at strstreambuf@@QAEPADXZ (MSVCRTI.@)
- *           class strstreambuf & __thiscall strstreambuf::str(class strstreambuf &)
- */
-DEFINE_THISCALL_WRAPPER(MSVCIRT_str_sl_void,4)
-char * __thiscall MSVCIRT_str_sl_void(class_strstreambuf * _this)
-{
-   FIXME("(%p)->() stub\n", _this);
-   return 0;
-}
-
 #ifdef __i386__
 
 #define DEFINE_VTBL_WRAPPER(off)            \
@@ -1786,6 +1969,7 @@ static void init_io(void *base)
 #ifdef __x86_64__
     init_streambuf_rtti(base);
     init_filebuf_rtti(base);
+    init_strstreambuf_rtti(base);
     init_ios_rtti(base);
 #endif
 }
diff --git a/dlls/msvcirt/msvcirt.h b/dlls/msvcirt/msvcirt.h
index 8886a44..5b59b78 100644
--- a/dlls/msvcirt/msvcirt.h
+++ b/dlls/msvcirt/msvcirt.h
@@ -23,6 +23,8 @@
 typedef LONG streamoff;
 typedef LONG streampos;
 typedef int filedesc;
+typedef void* (__cdecl *allocFunction)(LONG);
+typedef void (__cdecl *freeFunction)(void*);
 
 typedef enum {
     IOSTATE_goodbit   = 0x0,
diff --git a/dlls/msvcirt/msvcirt.spec b/dlls/msvcirt/msvcirt.spec
index ffb6f21..4b448ba 100644
--- a/dlls/msvcirt/msvcirt.spec
+++ b/dlls/msvcirt/msvcirt.spec
@@ -118,18 +118,18 @@
 @ stub -arch=win64 ??0strstream@@QEAA at PEADHH@Z
 @ stub -arch=win32 ??0strstream@@QAE at XZ  # __thiscall strstream::strstream(void)
 @ stub -arch=win64 ??0strstream@@QEAA at XZ
-@ stub -arch=win32 ??0strstreambuf@@QAE at ABV0@@Z  # __thiscall strstreambuf::strstreambuf(class strstreambuf const &)
-@ stub -arch=win64 ??0strstreambuf@@QEAA at AEBV0@@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at H@Z  # __thiscall strstreambuf::strstreambuf(int)
-@ stub -arch=win64 ??0strstreambuf@@QEAA at H@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at P6APAXJ@ZP6AXPAX at Z@Z  # __thiscall strstreambuf::strstreambuf(void * (__cdecl*)(long),void (__cdecl*)(void *))
-@ stub -arch=win64 ??0strstreambuf@@QEAA at P6APEAXJ@ZP6AXPEAX at Z@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at PADH0@Z  # __thiscall strstreambuf::strstreambuf(char *,int,char *)
-@ stub -arch=win64 ??0strstreambuf@@QEAA at PEADH0@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at PAEH0@Z  # __thiscall strstreambuf::strstreambuf(unsigned char *,int,unsigned char *)
-@ stub -arch=win64 ??0strstreambuf@@QEAA at PEAEH0@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at XZ  # __thiscall strstreambuf::strstreambuf(void)
-@ stub -arch=win64 ??0strstreambuf@@QEAA at XZ
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at ABV0@@Z(ptr ptr) strstreambuf_copy_ctor
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at AEBV0@@Z(ptr ptr) strstreambuf_copy_ctor
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at H@Z(ptr long) strstreambuf_dynamic_ctor
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at H@Z(ptr long) strstreambuf_dynamic_ctor
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at P6APAXJ@ZP6AXPAX at Z@Z(ptr ptr ptr) strstreambuf_funcs_ctor
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at P6APEAXJ@ZP6AXPEAX at Z@Z(ptr ptr ptr) strstreambuf_funcs_ctor
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at PADH0@Z(ptr ptr long ptr) strstreambuf_buffer_ctor
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at PEADH0@Z(ptr ptr long ptr) strstreambuf_buffer_ctor
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at PAEH0@Z(ptr ptr long ptr) strstreambuf_ubuffer_ctor
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at PEAEH0@Z(ptr ptr long ptr) strstreambuf_ubuffer_ctor
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at XZ(ptr) strstreambuf_ctor
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at XZ(ptr) strstreambuf_ctor
 @ stub -arch=win32 ??1Iostream_init@@QAE at XZ  # __thiscall Iostream_init::~Iostream_init(void)
 @ stub -arch=win64 ??1Iostream_init@@QEAA at XZ
 @ thiscall -arch=i386 ??1exception@@UAE at XZ(ptr) MSVCP_exception_dtor
@@ -168,8 +168,8 @@
 @ cdecl -arch=win64 ??1streambuf@@UEAA at XZ(ptr) streambuf_dtor
 @ stub -arch=win32 ??1strstream@@UAE at XZ  # virtual __thiscall strstream::~strstream(void)
 @ stub -arch=win64 ??1strstream@@UEAA at XZ
-@ stub -arch=win32 ??1strstreambuf@@UAE at XZ  # virtual __thiscall strstreambuf::~strstreambuf(void)
-@ stub -arch=win64 ??1strstreambuf@@UEAA at XZ
+@ thiscall -arch=win32 ??1strstreambuf@@UAE at XZ(ptr) strstreambuf_dtor
+@ cdecl -arch=win64 ??1strstreambuf@@UEAA at XZ(ptr) strstreambuf_dtor
 @ stub -arch=win32 ??4Iostream_init@@QAEAAV0 at ABV0@@Z  # class Iostream_init & __thiscall Iostream_init::operator=(class Iostream_init const &)
 @ stub -arch=win64 ??4Iostream_init@@QEAAAEAV0 at AEBV0@@Z
 @ thiscall -arch=i386 ??4exception@@QAEAAV0 at ABV0@@Z(ptr ptr) MSVCP_exception_assign
@@ -222,8 +222,8 @@
 @ cdecl -arch=win64 ??4streambuf@@QEAAAEAV0 at AEBV0@@Z(ptr ptr) streambuf_assign
 @ stub -arch=win32 ??4strstream@@QAEAAV0 at AAV0@@Z  # class strstream & __thiscall strstream::operator=(class strstream &)
 @ stub -arch=win64 ??4strstream@@QEAAAEAV0 at AEAV0@@Z
-@ stub -arch=win32 ??4strstreambuf@@QAEAAV0 at ABV0@@Z  # class strstreambuf & __thiscall strstreambuf::operator=(class strstreambuf const &)
-@ stub -arch=win64 ??4strstreambuf@@QEAAAEAV0 at AEBV0@@Z
+@ thiscall -arch=win32 ??4strstreambuf@@QAEAAV0 at ABV0@@Z(ptr ptr) strstreambuf_assign
+@ cdecl -arch=win64 ??4strstreambuf@@QEAAAEAV0 at AEBV0@@Z(ptr ptr) strstreambuf_assign
 @ stub -arch=win32 ??5istream@@QAEAAV0 at AAC@Z  # class istream & __thiscall istream::operator>>(signed char &)
 @ stub -arch=win64 ??5istream@@QEAAAEAV0 at AEAC@Z
 @ stub -arch=win32 ??5istream@@QAEAAV0 at AAD@Z  # class istream & __thiscall istream::operator>>(char &)
@@ -320,7 +320,7 @@
 # @ extern ??_7stdiostream@@6B@  # const stdiostream::`vftable'
 @ extern ??_7streambuf@@6B@ MSVCP_streambuf_vtable
 # @ extern ??_7strstream@@6B@  # const strstream::`vftable'
-# @ extern ??_7strstreambuf@@6B@  # const strstreambuf::`vftable'
+@ extern ??_7strstreambuf@@6B@ MSVCP_strstreambuf_vtable
 # @ extern ??_8fstream@@7Bistream@@@  # const fstream::`vbtable'{for `istream'}
 # @ extern ??_8fstream@@7Bostream@@@  # const fstream::`vbtable'{for `ostream'}
 # @ extern ??_8ifstream@@7B@  # const ifstream::`vbtable'
@@ -379,7 +379,7 @@
 @ stub -arch=win32 ??_Estdiostream@@UAEPAXI at Z  # virtual void * __thiscall stdiostream::`vector deleting destructor'(unsigned int)
 @ thiscall -arch=win32 ??_Estreambuf@@UAEPAXI at Z(ptr long) streambuf_vector_dtor
 @ stub -arch=win32 ??_Estrstream@@UAEPAXI at Z  # virtual void * __thiscall strstream::`vector deleting destructor'(unsigned int)
-@ stub -arch=win32 ??_Estrstreambuf@@UAEPAXI at Z  # virtual void * __thiscall strstreambuf::`vector deleting destructor'(unsigned int)
+@ thiscall -arch=win32 ??_Estrstreambuf@@UAEPAXI at Z(ptr long) strstreambuf_vector_dtor
 @ thiscall -arch=win32 ??_Gexception@@UAEPAXI at Z(ptr long) MSVCP_exception_scalar_dtor
 @ thiscall -arch=win32 ??_Gfilebuf@@UAEPAXI at Z(ptr long) filebuf_scalar_dtor
 @ stub -arch=win32 ??_Gfstream@@UAEPAXI at Z  # virtual void * __thiscall fstream::`scalar deleting destructor'(unsigned int)
@@ -398,7 +398,7 @@
 @ stub -arch=win32 ??_Gstdiostream@@UAEPAXI at Z  # virtual void * __thiscall stdiostream::`scalar deleting destructor'(unsigned int)
 @ thiscall -arch=win32 ??_Gstreambuf@@UAEPAXI at Z(ptr long) streambuf_scalar_dtor
 @ stub -arch=win32 ??_Gstrstream@@UAEPAXI at Z  # virtual void * __thiscall strstream::`scalar deleting destructor'(unsigned int)
-@ stub -arch=win32 ??_Gstrstreambuf@@UAEPAXI at Z  # virtual void * __thiscall strstreambuf::`scalar deleting destructor'(unsigned int)
+@ thiscall -arch=win32 ??_Gstrstreambuf@@UAEPAXI at Z(ptr long) strstreambuf_scalar_dtor
 @ extern ?adjustfield at ios@@2JB ios_adjustfield
 @ thiscall -arch=win32 ?allocate at streambuf@@IAEHXZ(ptr) streambuf_allocate
 @ cdecl -arch=win64 ?allocate at streambuf@@IEAAHXZ(ptr) streambuf_allocate
@@ -447,8 +447,8 @@
 @ cdecl -arch=win64 ?delbuf at ios@@QEBAHXZ(ptr) ios_delbuf_get
 @ thiscall -arch=win32 ?doallocate at streambuf@@MAEHXZ(ptr) streambuf_doallocate
 @ cdecl -arch=win64 ?doallocate at streambuf@@MEAAHXZ(ptr) streambuf_doallocate
-@ stub -arch=win32 ?doallocate at strstreambuf@@MAEHXZ  # virtual int __thiscall strstreambuf::doallocate(void)
-@ stub -arch=win64 ?doallocate at strstreambuf@@MEAAHXZ
+@ thiscall -arch=win32 ?doallocate at strstreambuf@@MAEHXZ(ptr) strstreambuf_doallocate
+@ cdecl -arch=win64 ?doallocate at strstreambuf@@MEAAHXZ(ptr) strstreambuf_doallocate
 @ stub -arch=win32 ?eatwhite at istream@@QAEXXZ  # void __thiscall istream::eatwhite(void)
 @ stub -arch=win64 ?eatwhite at istream@@QEAAXXZ
 @ thiscall -arch=win32 ?eback at streambuf@@IBEPADXZ(ptr) streambuf_eback
@@ -489,8 +489,8 @@
 @ stub -arch=win64 ?flush@@YAAEAVostream@@AEAV1@@Z
 @ stub -arch=win32 ?flush at ostream@@QAEAAV1 at XZ  # class ostream & __thiscall ostream::flush(void)
 @ stub -arch=win64 ?flush at ostream@@QEAAAEAV1 at XZ
-@ stub -arch=win32 ?freeze at strstreambuf@@QAEXH at Z  # void __thiscall strstreambuf::freeze(int)
-@ stub -arch=win64 ?freeze at strstreambuf@@QEAAXH at Z
+@ thiscall -arch=win32 ?freeze at strstreambuf@@QAEXH at Z(ptr long) strstreambuf_freeze
+@ cdecl -arch=win64 ?freeze at strstreambuf@@QEAAXH at Z(ptr long) strstreambuf_freeze
 @ thiscall -arch=win32 ?gbump at streambuf@@IAEXH at Z(ptr long) streambuf_gbump
 @ cdecl -arch=win64 ?gbump at streambuf@@IEAAXH at Z(ptr long) streambuf_gbump
 @ stub -arch=win32 ?gcount at istream@@QBEHXZ  # int __thiscall istream::gcount(void)const 
@@ -581,8 +581,8 @@
 @ cdecl -arch=win64 ?overflow at filebuf@@UEAAHH at Z(ptr long) filebuf_overflow
 @ stub -arch=win32 ?overflow at stdiobuf@@UAEHH at Z  # virtual int __thiscall stdiobuf::overflow(int)
 @ stub -arch=win64 ?overflow at stdiobuf@@UEAAHH at Z
-@ stub -arch=win32 ?overflow at strstreambuf@@UAEHH at Z  # virtual int __thiscall strstreambuf::overflow(int)
-@ stub -arch=win64 ?overflow at strstreambuf@@UEAAHH at Z
+@ thiscall -arch=win32 ?overflow at strstreambuf@@UAEHH at Z(ptr long) strstreambuf_overflow
+@ cdecl -arch=win64 ?overflow at strstreambuf@@UEAAHH at Z(ptr long) strstreambuf_overflow
 @ stub -arch=win32 ?pbackfail at stdiobuf@@UAEHH at Z  # virtual int __thiscall stdiobuf::pbackfail(int)
 @ stub -arch=win64 ?pbackfail at stdiobuf@@UEAAHH at Z
 @ thiscall -arch=win32 ?pbackfail at streambuf@@UAEHH at Z(ptr long) streambuf_pbackfail
@@ -649,8 +649,8 @@
 @ stub -arch=win64 ?seekoff at stdiobuf@@UEAAJJW4seek_dir at ios@@H at Z
 @ thiscall -arch=win32 ?seekoff at streambuf@@UAEJJW4seek_dir at ios@@H at Z(ptr long long long) streambuf_seekoff
 @ cdecl -arch=win64 ?seekoff at streambuf@@UEAAJJW4seek_dir at ios@@H at Z(ptr long long long) streambuf_seekoff
-@ stub -arch=win32 ?seekoff at strstreambuf@@UAEJJW4seek_dir at ios@@H at Z  # virtual long __thiscall strstreambuf::seekoff(long,enum ios::seek_dir,int)
-@ stub -arch=win64 ?seekoff at strstreambuf@@UEAAJJW4seek_dir at ios@@H at Z
+@ thiscall -arch=win32 ?seekoff at strstreambuf@@UAEJJW4seek_dir at ios@@H at Z(ptr long long long) strstreambuf_seekoff
+@ cdecl -arch=win64 ?seekoff at strstreambuf@@UEAAJJW4seek_dir at ios@@H at Z(ptr long long long) strstreambuf_seekoff
 @ stub -arch=win32 ?seekp at ostream@@QAEAAV1 at J@Z  # class ostream & __thiscall ostream::seekp(long)
 @ stub -arch=win64 ?seekp at ostream@@QEAAAEAV1 at J@Z
 @ stub -arch=win32 ?seekp at ostream@@QAEAAV1 at JW4seek_dir@ios@@@Z  # class ostream & __thiscall ostream::seekp(long,enum ios::seek_dir)
@@ -669,8 +669,8 @@
 @ stub -arch=win64 ?setbuf at ofstream@@QEAAPEAVstreambuf@@PEADH at Z
 @ thiscall -arch=win32 ?setbuf at streambuf@@UAEPAV1 at PADH@Z(ptr ptr long) streambuf_setbuf
 @ cdecl -arch=win64 ?setbuf at streambuf@@UEAAPEAV1 at PEADH@Z(ptr ptr long) streambuf_setbuf
-@ stub -arch=win32 ?setbuf at strstreambuf@@UAEPAVstreambuf@@PADH at Z  # virtual class streambuf * __thiscall strstreambuf::setbuf(char *,int)
-@ stub -arch=win64 ?setbuf at strstreambuf@@UEAAPEAVstreambuf@@PEADH at Z
+@ thiscall -arch=win32 ?setbuf at strstreambuf@@UAEPAVstreambuf@@PADH at Z(ptr ptr long) strstreambuf_setbuf
+@ cdecl -arch=win64 ?setbuf at strstreambuf@@UEAAPEAVstreambuf@@PEADH at Z(ptr ptr long) strstreambuf_setbuf
 @ thiscall -arch=win32 ?setf at ios@@QAEJJ at Z(ptr long) ios_setf
 @ cdecl -arch=win64 ?setf at ios@@QEAAJJ at Z(ptr long) ios_setf
 @ thiscall -arch=win32 ?setf at ios@@QAEJJJ at Z(ptr long long) ios_setf_mask
@@ -718,8 +718,8 @@
 @ stub -arch=win64 ?str at ostrstream@@QEAAPEADXZ
 @ stub -arch=win32 ?str at strstream@@QAEPADXZ  # char * __thiscall strstream::str(void)
 @ stub -arch=win64 ?str at strstream@@QEAAPEADXZ
-@ thiscall -arch=win32 ?str at strstreambuf@@QAEPADXZ(ptr) MSVCIRT_str_sl_void  # char * __thiscall strstreambuf::str(void)
-@ cdecl -arch=win64 ?str at strstreambuf@@QEAAPEADXZ(ptr) MSVCIRT_str_sl_void
+@ thiscall -arch=win32 ?str at strstreambuf@@QAEPADXZ(ptr) strstreambuf_str
+@ cdecl -arch=win64 ?str at strstreambuf@@QEAAPEADXZ(ptr) strstreambuf_str
 # @ extern ?sunk_with_stdio at ios@@0HA  # static int ios::sunk_with_stdio
 @ thiscall -arch=win32 ?sync at filebuf@@UAEHXZ(ptr) filebuf_sync
 @ cdecl -arch=win64 ?sync at filebuf@@UEAAHXZ(ptr) filebuf_sync
@@ -729,8 +729,8 @@
 @ stub -arch=win64 ?sync at stdiobuf@@UEAAHXZ
 @ thiscall -arch=win32 ?sync at streambuf@@UAEHXZ(ptr) streambuf_sync
 @ cdecl -arch=win64 ?sync at streambuf@@UEAAHXZ(ptr) streambuf_sync
-@ stub -arch=win32 ?sync at strstreambuf@@UAEHXZ  # virtual int __thiscall strstreambuf::sync(void)
-@ stub -arch=win64 ?sync at strstreambuf@@UEAAHXZ
+@ thiscall -arch=win32 ?sync at strstreambuf@@UAEHXZ(ptr) strstreambuf_sync
+@ cdecl -arch=win64 ?sync at strstreambuf@@UEAAHXZ(ptr) strstreambuf_sync
 @ cdecl ?sync_with_stdio at ios@@SAXXZ() ios_sync_with_stdio
 @ stub -arch=win32 ?tellg at istream@@QAEJXZ  # long __thiscall istream::tellg(void)
 @ stub -arch=win64 ?tellg at istream@@QEAAJXZ
@@ -749,8 +749,8 @@
 @ cdecl -arch=win64 ?underflow at filebuf@@UEAAHXZ(ptr) filebuf_underflow
 @ stub -arch=win32 ?underflow at stdiobuf@@UAEHXZ  # virtual int __thiscall stdiobuf::underflow(void)
 @ stub -arch=win64 ?underflow at stdiobuf@@UEAAHXZ
-@ stub -arch=win32 ?underflow at strstreambuf@@UAEHXZ  # virtual int __thiscall strstreambuf::underflow(void)
-@ stub -arch=win64 ?underflow at strstreambuf@@UEAAHXZ
+@ thiscall -arch=win32 ?underflow at strstreambuf@@UAEHXZ(ptr) strstreambuf_underflow
+@ cdecl -arch=win64 ?underflow at strstreambuf@@UEAAHXZ(ptr) strstreambuf_underflow
 @ cdecl -arch=win32 ?unlock at ios@@QAAXXZ(ptr) ios_unlock
 @ cdecl -arch=win64 ?unlock at ios@@QEAAXXZ(ptr) ios_unlock
 @ thiscall -arch=win32 ?unlock at streambuf@@QAEXXZ(ptr) streambuf_unlock
diff --git a/dlls/msvcrt20/msvcrt20.spec b/dlls/msvcrt20/msvcrt20.spec
index ade81ae..53ef34c 100644
--- a/dlls/msvcrt20/msvcrt20.spec
+++ b/dlls/msvcrt20/msvcrt20.spec
@@ -108,16 +108,16 @@
 @ stub -arch=win64 ??0strstream@@QEAA at PEADHH@Z
 @ stub -arch=win32 ??0strstream@@QAE at XZ
 @ stub -arch=win64 ??0strstream@@QEAA at XZ
-@ stub -arch=win32 ??0strstreambuf@@QAE at ABV0@@Z
-@ stub -arch=win64 ??0strstreambuf@@QEAA at AEBV0@@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at H@Z
-@ stub -arch=win64 ??0strstreambuf@@QEAA at H@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at P6APAXJ@ZP6AXPAX at Z@Z
-@ stub -arch=win64 ??0strstreambuf@@QEAA at P6APEAXJ@ZP6AXPEAX at Z@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at PADH0@Z
-@ stub -arch=win64 ??0strstreambuf@@QEAA at PEADH0@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at XZ
-@ stub -arch=win64 ??0strstreambuf@@QEAA at XZ
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at ABV0@@Z(ptr ptr) msvcirt.??0strstreambuf@@QAE at ABV0@@Z
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at AEBV0@@Z(ptr ptr) msvcirt.??0strstreambuf@@QEAA at AEBV0@@Z
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at H@Z(ptr long) msvcirt.??0strstreambuf@@QAE at H@Z
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at H@Z(ptr long) msvcirt.??0strstreambuf@@QEAA at H@Z
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at P6APAXJ@ZP6AXPAX at Z@Z(ptr ptr ptr) msvcirt.??0strstreambuf@@QAE at P6APAXJ@ZP6AXPAX at Z@Z
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at P6APEAXJ@ZP6AXPEAX at Z@Z(ptr ptr ptr) msvcirt.??0strstreambuf@@QEAA at P6APEAXJ@ZP6AXPEAX at Z@Z
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at PADH0@Z(ptr ptr long ptr) msvcirt.??0strstreambuf@@QAE at PADH0@Z
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at PEADH0@Z(ptr ptr long ptr) msvcirt.??0strstreambuf@@QEAA at PEADH0@Z
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at XZ(ptr) msvcirt.??0strstreambuf@@QAE at XZ
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at XZ(ptr) msvcirt.??0strstreambuf@@QEAA at XZ
 @ stub -arch=win32 ??1Iostream_init@@QAE at XZ
 @ stub -arch=win64 ??1Iostream_init@@QEAA at XZ
 @ thiscall -arch=win32 ??1filebuf@@UAE at XZ(ptr) msvcirt.??1filebuf@@UAE at XZ
@@ -152,8 +152,8 @@
 @ cdecl -arch=win64 ??1streambuf@@UEAA at XZ(ptr) msvcirt.??1streambuf@@UEAA at XZ
 @ stub -arch=win32 ??1strstream@@UAE at XZ
 @ stub -arch=win64 ??1strstream@@UEAA at XZ
-@ stub -arch=win32 ??1strstreambuf@@UAE at XZ
-@ stub -arch=win64 ??1strstreambuf@@UEAA at XZ
+@ thiscall -arch=win32 ??1strstreambuf@@UAE at XZ(ptr) msvcirt.??1strstreambuf@@UAE at XZ
+@ cdecl -arch=win64 ??1strstreambuf@@UEAA at XZ(ptr) msvcirt.??1strstreambuf@@UEAA at XZ
 @ cdecl -arch=win32 ??2 at YAPAXI@Z(long) msvcrt.??2 at YAPAXI@Z
 @ cdecl -arch=win64 ??2 at YAPEAX_K@Z(long) msvcrt.??2 at YAPEAX_K@Z
 @ cdecl -arch=win32 ??3 at YAXPAX@Z(ptr) msvcrt.??3 at YAXPAX@Z
@@ -206,8 +206,8 @@
 @ cdecl -arch=win64 ??4streambuf@@QEAAAEAV0 at AEBV0@@Z(ptr ptr) msvcirt.??4streambuf@@QEAAAEAV0 at AEBV0@@Z
 @ stub -arch=win32 ??4strstream@@QAEAAV0 at AAV0@@Z
 @ stub -arch=win64 ??4strstream@@QEAAAEAV0 at AEAV0@@Z
-@ stub -arch=win32 ??4strstreambuf@@QAEAAV0 at ABV0@@Z
-@ stub -arch=win64 ??4strstreambuf@@QEAAAEAV0 at AEBV0@@Z
+@ thiscall -arch=win32 ??4strstreambuf@@QAEAAV0 at ABV0@@Z(ptr ptr) msvcirt.??4strstreambuf@@QAEAAV0 at ABV0@@Z
+@ cdecl -arch=win64 ??4strstreambuf@@QEAAAEAV0 at AEBV0@@Z(ptr ptr) msvcirt.??4strstreambuf@@QEAAAEAV0 at AEBV0@@Z
 @ stub -arch=win32 ??5istream@@QAEAAV0 at AAC@Z
 @ stub -arch=win64 ??5istream@@QEAAAEAV0 at AEAC@Z
 @ stub -arch=win32 ??5istream@@QAEAAV0 at AAD@Z
@@ -302,7 +302,7 @@
 # @ extern ??_7stdiostream@@6B@
 @ extern ??_7streambuf@@6B@ msvcirt.??_7streambuf@@6B@
 # @ extern ??_7strstream@@6B@
-# @ extern ??_7strstreambuf@@6B@
+@ extern ??_7strstreambuf@@6B@ msvcirt.??_7strstreambuf@@6B@
 # @ extern ??_8fstream@@7Bistream@@@
 # @ extern ??_8fstream@@7Bostream@@@
 # @ extern ??_8ifstream@@7B@
@@ -360,7 +360,7 @@
 @ stub -arch=win32 ??_Estdiostream@@UAEPAXI at Z
 @ thiscall -arch=win32 ??_Estreambuf@@UAEPAXI at Z(ptr long) msvcirt.??_Estreambuf@@UAEPAXI at Z
 @ stub -arch=win32 ??_Estrstream@@UAEPAXI at Z
-@ stub -arch=win32 ??_Estrstreambuf@@UAEPAXI at Z
+@ thiscall -arch=win32 ??_Estrstreambuf@@UAEPAXI at Z(ptr long) msvcirt.??_Estrstreambuf@@UAEPAXI at Z
 @ stub -arch=win32 ??_GIostream_init@@QAEPAXI at Z
 @ thiscall -arch=win32 ??_Gfilebuf@@UAEPAXI at Z(ptr long) msvcirt.??_Gfilebuf@@UAEPAXI at Z
 @ stub -arch=win32 ??_Gfstream@@UAEPAXI at Z
@@ -378,7 +378,7 @@
 @ stub -arch=win32 ??_Gstdiostream@@UAEPAXI at Z
 @ thiscall -arch=win32 ??_Gstreambuf@@UAEPAXI at Z(ptr long) msvcirt.??_Gstreambuf@@UAEPAXI at Z
 @ stub -arch=win32 ??_Gstrstream@@UAEPAXI at Z
-@ stub -arch=win32 ??_Gstrstreambuf@@UAEPAXI at Z
+@ thiscall -arch=win32 ??_Gstrstreambuf@@UAEPAXI at Z(ptr long) msvcirt.??_Gstrstreambuf@@UAEPAXI at Z
 @ cdecl -arch=win32 ?_query_new_handler@@YAP6AHI at ZXZ() msvcrt.?_query_new_handler@@YAP6AHI at ZXZ
 @ cdecl -arch=win64 ?_query_new_handler@@YAP6AH_K at ZXZ() msvcrt.?_query_new_handler@@YAP6AH_K at ZXZ
 @ cdecl ?_query_new_mode@@YAHXZ() msvcrt.?_query_new_mode@@YAHXZ
@@ -435,8 +435,8 @@
 @ cdecl -arch=win64 ?delbuf at ios@@QEBAHXZ(ptr) msvcirt.?delbuf at ios@@QEBAHXZ
 @ thiscall -arch=win32 ?doallocate at streambuf@@MAEHXZ(ptr) msvcirt.?doallocate at streambuf@@MAEHXZ
 @ cdecl -arch=win64 ?doallocate at streambuf@@MEAAHXZ(ptr) msvcirt.?doallocate at streambuf@@MEAAHXZ
-@ stub -arch=win32 ?doallocate at strstreambuf@@MAEHXZ
-@ stub -arch=win64 ?doallocate at strstreambuf@@MEAAHXZ
+@ thiscall -arch=win32 ?doallocate at strstreambuf@@MAEHXZ(ptr) msvcirt.?doallocate at strstreambuf@@MAEHXZ
+@ cdecl -arch=win64 ?doallocate at strstreambuf@@MEAAHXZ(ptr) msvcirt.?doallocate at strstreambuf@@MEAAHXZ
 @ stub -arch=win32 ?eatwhite at istream@@QAEXXZ
 @ stub -arch=win64 ?eatwhite at istream@@QEAAXXZ
 @ thiscall -arch=win32 ?eback at streambuf@@IBEPADXZ(ptr) msvcirt.?eback at streambuf@@IBEPADXZ
@@ -477,8 +477,8 @@
 @ stub -arch=win64 ?flush@@YAAEAVostream@@AEAV1@@Z
 @ stub -arch=win32 ?flush at ostream@@QAEAAV1 at XZ
 @ stub -arch=win64 ?flush at ostream@@QEAAAEAV1 at XZ
-@ stub -arch=win32 ?freeze at strstreambuf@@QAEXH at Z
-@ stub -arch=win64 ?freeze at strstreambuf@@QEAAXH at Z
+@ thiscall -arch=win32 ?freeze at strstreambuf@@QAEXH at Z(ptr long) msvcirt.?freeze at strstreambuf@@QAEXH at Z
+@ cdecl -arch=win64 ?freeze at strstreambuf@@QEAAXH at Z(ptr long) msvcirt.?freeze at strstreambuf@@QEAAXH at Z
 @ thiscall -arch=win32 ?gbump at streambuf@@IAEXH at Z(ptr long) msvcirt.?gbump at streambuf@@IAEXH at Z
 @ cdecl -arch=win64 ?gbump at streambuf@@IEAAXH at Z(ptr long) msvcirt.?gbump at streambuf@@IEAAXH at Z
 @ stub -arch=win32 ?gcount at istream@@QBEHXZ
@@ -567,8 +567,8 @@
 @ cdecl -arch=win64 ?overflow at filebuf@@UEAAHH at Z(ptr long) msvcirt.?overflow at filebuf@@UEAAHH at Z
 @ stub -arch=win32 ?overflow at stdiobuf@@UAEHH at Z
 @ stub -arch=win64 ?overflow at stdiobuf@@UEAAHH at Z
-@ stub -arch=win32 ?overflow at strstreambuf@@UAEHH at Z
-@ stub -arch=win64 ?overflow at strstreambuf@@UEAAHH at Z
+@ thiscall -arch=win32 ?overflow at strstreambuf@@UAEHH at Z(ptr long) msvcirt.?overflow at strstreambuf@@UAEHH at Z
+@ cdecl -arch=win64 ?overflow at strstreambuf@@UEAAHH at Z(ptr long) msvcirt.?overflow at strstreambuf@@UEAAHH at Z
 @ stub -arch=win32 ?pbackfail at stdiobuf@@UAEHH at Z
 @ stub -arch=win64 ?pbackfail at stdiobuf@@UEAAHH at Z
 @ thiscall -arch=win32 ?pbackfail at streambuf@@UAEHH at Z(ptr long) msvcirt.?pbackfail at streambuf@@UAEHH at Z
@@ -635,8 +635,8 @@
 @ stub -arch=win64 ?seekoff at stdiobuf@@UEAAJJW4seek_dir at ios@@H at Z
 @ thiscall -arch=win32 ?seekoff at streambuf@@UAEJJW4seek_dir at ios@@H at Z(ptr long long long) msvcirt.?seekoff at streambuf@@UAEJJW4seek_dir at ios@@H at Z
 @ cdecl -arch=win64 ?seekoff at streambuf@@UEAAJJW4seek_dir at ios@@H at Z(ptr long long long) msvcirt.?seekoff at streambuf@@UEAAJJW4seek_dir at ios@@H at Z
-@ stub -arch=win32 ?seekoff at strstreambuf@@UAEJJW4seek_dir at ios@@H at Z
-@ stub -arch=win64 ?seekoff at strstreambuf@@UEAAJJW4seek_dir at ios@@H at Z
+@ thiscall -arch=win32 ?seekoff at strstreambuf@@UAEJJW4seek_dir at ios@@H at Z(ptr long long long) msvcirt.?seekoff at strstreambuf@@UAEJJW4seek_dir at ios@@H at Z
+@ cdecl -arch=win64 ?seekoff at strstreambuf@@UEAAJJW4seek_dir at ios@@H at Z(ptr long long long) msvcirt.?seekoff at strstreambuf@@UEAAJJW4seek_dir at ios@@H at Z
 @ stub -arch=win32 ?seekp at ostream@@QAEAAV1 at J@Z
 @ stub -arch=win64 ?seekp at ostream@@QEAAAEAV1 at J@Z
 @ stub -arch=win32 ?seekp at ostream@@QAEAAV1 at JW4seek_dir@ios@@@Z
@@ -657,8 +657,8 @@
 @ stub -arch=win64 ?setbuf at ofstream@@QEAAPEAVstreambuf@@PEADH at Z
 @ thiscall -arch=win32 ?setbuf at streambuf@@UAEPAV1 at PADH@Z(ptr ptr long) msvcirt.?setbuf at streambuf@@UAEPAV1 at PADH@Z
 @ cdecl -arch=win64 ?setbuf at streambuf@@UEAAPEAV1 at PEADH@Z(ptr ptr long) msvcirt.?setbuf at streambuf@@UEAAPEAV1 at PEADH@Z
-@ stub -arch=win32 ?setbuf at strstreambuf@@UAEPAVstreambuf@@PADH at Z
-@ stub -arch=win64 ?setbuf at strstreambuf@@UEAAPEAVstreambuf@@PEADH at Z
+@ thiscall -arch=win32 ?setbuf at strstreambuf@@UAEPAVstreambuf@@PADH at Z(ptr ptr long) msvcirt.?setbuf at strstreambuf@@UAEPAVstreambuf@@PADH at Z
+@ cdecl -arch=win64 ?setbuf at strstreambuf@@UEAAPEAVstreambuf@@PEADH at Z(ptr ptr long) msvcirt.?setbuf at strstreambuf@@UEAAPEAVstreambuf@@PEADH at Z
 @ thiscall -arch=win32 ?setf at ios@@QAEJJ at Z(ptr long) msvcirt.?setf at ios@@QAEJJ at Z
 @ cdecl -arch=win64 ?setf at ios@@QEAAJJ at Z(ptr long) msvcirt.?setf at ios@@QEAAJJ at Z
 @ thiscall -arch=win32 ?setf at ios@@QAEJJJ at Z(ptr long long) msvcirt.?setf at ios@@QAEJJJ at Z
@@ -717,8 +717,8 @@
 @ stub -arch=win64 ?sync at stdiobuf@@UEAAHXZ
 @ thiscall -arch=win32 ?sync at streambuf@@UAEHXZ(ptr) msvcirt.?sync at streambuf@@UAEHXZ
 @ cdecl -arch=win64 ?sync at streambuf@@UEAAHXZ(ptr) msvcirt.?sync at streambuf@@UEAAHXZ
-@ stub -arch=win32 ?sync at strstreambuf@@UAEHXZ
-@ stub -arch=win64 ?sync at strstreambuf@@UEAAHXZ
+@ thiscall -arch=win32 ?sync at strstreambuf@@UAEHXZ(ptr) msvcirt.?sync at strstreambuf@@UAEHXZ
+@ cdecl -arch=win64 ?sync at strstreambuf@@UEAAHXZ(ptr) msvcirt.?sync at strstreambuf@@UEAAHXZ
 @ cdecl ?sync_with_stdio at ios@@SAXXZ() msvcirt.?sync_with_stdio at ios@@SAXXZ
 @ stub -arch=win32 ?tellg at istream@@QAEJXZ
 @ stub -arch=win64 ?tellg at istream@@QEAAJXZ
@@ -738,8 +738,8 @@
 @ cdecl -arch=win64 ?underflow at filebuf@@UEAAHXZ(ptr) msvcirt.?underflow at filebuf@@UEAAHXZ
 @ stub -arch=win32 ?underflow at stdiobuf@@UAEHXZ
 @ stub -arch=win64 ?underflow at stdiobuf@@UEAAHXZ
-@ stub -arch=win32 ?underflow at strstreambuf@@UAEHXZ
-@ stub -arch=win64 ?underflow at strstreambuf@@UEAAHXZ
+@ thiscall -arch=win32 ?underflow at strstreambuf@@UAEHXZ(ptr) msvcirt.?underflow at strstreambuf@@UAEHXZ
+@ cdecl -arch=win64 ?underflow at strstreambuf@@UEAAHXZ(ptr) msvcirt.?underflow at strstreambuf@@UEAAHXZ
 @ cdecl ?unexpected@@YAXXZ() msvcrt.?unexpected@@YAXXZ
 @ cdecl -arch=win32 ?unlock at ios@@QAAXXZ(ptr) msvcirt.?unlock at ios@@QAAXXZ
 @ cdecl -arch=win64 ?unlock at ios@@QEAAXXZ(ptr) msvcirt.?unlock at ios@@QEAAXXZ
diff --git a/dlls/msvcrt40/msvcrt40.spec b/dlls/msvcrt40/msvcrt40.spec
index 33e4f16..4a220ba 100644
--- a/dlls/msvcrt40/msvcrt40.spec
+++ b/dlls/msvcrt40/msvcrt40.spec
@@ -130,16 +130,16 @@
 @ stub -arch=win64 ??0strstream@@QEAA at PEADHH@Z
 @ stub -arch=win32 ??0strstream@@QAE at XZ
 @ stub -arch=win64 ??0strstream@@QEAA at XZ
-@ stub -arch=win32 ??0strstreambuf@@QAE at ABV0@@Z
-@ stub -arch=win64 ??0strstreambuf@@QEAA at AEBV0@@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at H@Z
-@ stub -arch=win64 ??0strstreambuf@@QEAA at H@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at P6APAXJ@ZP6AXPAX at Z@Z
-@ stub -arch=win64 ??0strstreambuf@@QEAA at P6APEAXJ@ZP6AXPEAX at Z@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at PADH0@Z
-@ stub -arch=win64 ??0strstreambuf@@QEAA at PEADH0@Z
-@ stub -arch=win32 ??0strstreambuf@@QAE at XZ
-@ stub -arch=win64 ??0strstreambuf@@QEAA at XZ
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at ABV0@@Z(ptr ptr) msvcirt.??0strstreambuf@@QAE at ABV0@@Z
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at AEBV0@@Z(ptr ptr) msvcirt.??0strstreambuf@@QEAA at AEBV0@@Z
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at H@Z(ptr long) msvcirt.??0strstreambuf@@QAE at H@Z
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at H@Z(ptr long) msvcirt.??0strstreambuf@@QEAA at H@Z
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at P6APAXJ@ZP6AXPAX at Z@Z(ptr ptr ptr) msvcirt.??0strstreambuf@@QAE at P6APAXJ@ZP6AXPAX at Z@Z
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at P6APEAXJ@ZP6AXPEAX at Z@Z(ptr ptr ptr) msvcirt.??0strstreambuf@@QEAA at P6APEAXJ@ZP6AXPEAX at Z@Z
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at PADH0@Z(ptr ptr long ptr) msvcirt.??0strstreambuf@@QAE at PADH0@Z
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at PEADH0@Z(ptr ptr long ptr) msvcirt.??0strstreambuf@@QEAA at PEADH0@Z
+@ thiscall -arch=win32 ??0strstreambuf@@QAE at XZ(ptr) msvcirt.??0strstreambuf@@QAE at XZ
+@ cdecl -arch=win64 ??0strstreambuf@@QEAA at XZ(ptr) msvcirt.??0strstreambuf@@QEAA at XZ
 @ stub -arch=win32 ??1Iostream_init@@QAE at XZ
 @ stub -arch=win64 ??1Iostream_init@@QEAA at XZ
 @ thiscall -arch=i386 ??1__non_rtti_object@@UAE at XZ(ptr) msvcrt.??1__non_rtti_object@@UAE at XZ
@@ -184,8 +184,8 @@
 @ cdecl -arch=win64 ??1streambuf@@UEAA at XZ(ptr) msvcirt.??1streambuf@@UEAA at XZ
 @ stub -arch=win32 ??1strstream@@UAE at XZ
 @ stub -arch=win64 ??1strstream@@UEAA at XZ
-@ stub -arch=win32 ??1strstreambuf@@UAE at XZ
-@ stub -arch=win64 ??1strstreambuf@@UEAA at XZ
+@ thiscall -arch=win32 ??1strstreambuf@@UAE at XZ(ptr) msvcirt.??1strstreambuf@@UAE at XZ
+@ cdecl -arch=win64 ??1strstreambuf@@UEAA at XZ(ptr) msvcirt.??1strstreambuf@@UEAA at XZ
 @ thiscall -arch=i386 ??1type_info@@UAE at XZ(ptr) msvcrt.??1type_info@@UAE at XZ
 @ cdecl -arch=win64 ??1type_info@@UEAA at XZ(ptr) msvcrt.??1type_info@@UEAA at XZ
 @ cdecl -arch=win32 ??2 at YAPAXI@Z(long) msvcrt.??2 at YAPAXI@Z
@@ -250,8 +250,8 @@
 @ cdecl -arch=win64 ??4streambuf@@QEAAAEAV0 at AEBV0@@Z(ptr ptr) msvcirt.??4streambuf@@QEAAAEAV0 at AEBV0@@Z
 @ stub -arch=win32 ??4strstream@@QAEAAV0 at AAV0@@Z
 @ stub -arch=win64 ??4strstream@@QEAAAEAV0 at AEAV0@@Z
-@ stub -arch=win32 ??4strstreambuf@@QAEAAV0 at ABV0@@Z
-@ stub -arch=win64 ??4strstreambuf@@QEAAAEAV0 at AEBV0@@Z
+@ thiscall -arch=win32 ??4strstreambuf@@QAEAAV0 at ABV0@@Z(ptr ptr) msvcirt.??4strstreambuf@@QAEAAV0 at ABV0@@Z
+@ cdecl -arch=win64 ??4strstreambuf@@QEAAAEAV0 at AEBV0@@Z(ptr ptr) msvcirt.??4strstreambuf@@QEAAAEAV0 at AEBV0@@Z
 @ stub -arch=win32 ??5istream@@QAEAAV0 at AAC@Z
 @ stub -arch=win64 ??5istream@@QEAAAEAV0 at AEAC@Z
 @ stub -arch=win32 ??5istream@@QAEAAV0 at AAD@Z
@@ -355,7 +355,7 @@
 # @ extern ??_7stdiostream@@6B@
 @ extern ??_7streambuf@@6B@ msvcirt.??_7streambuf@@6B@
 # @ extern ??_7strstream@@6B@
-# @ extern ??_7strstreambuf@@6B@
+@ extern ??_7strstreambuf@@6B@ msvcirt.??_7strstreambuf@@6B@
 # @ extern ??_8fstream@@7Bistream@@@
 # @ extern ??_8fstream@@7Bostream@@@
 # @ extern ??_8ifstream@@7B@
@@ -418,7 +418,7 @@
 @ stub -arch=win32 ??_Estdiostream@@UAEPAXI at Z
 @ thiscall -arch=win32 ??_Estreambuf@@UAEPAXI at Z(ptr long) msvcirt.??_Estreambuf@@UAEPAXI at Z
 @ stub -arch=win32 ??_Estrstream@@UAEPAXI at Z
-@ stub -arch=win32 ??_Estrstreambuf@@UAEPAXI at Z
+@ thiscall -arch=win32 ??_Estrstreambuf@@UAEPAXI at Z(ptr long) msvcirt.??_Estrstreambuf@@UAEPAXI at Z
 @ stub -arch=win32 ??_GIostream_init@@QAEPAXI at Z
 @ thiscall -arch=win32 ??_G__non_rtti_object@@UAEPAXI at Z(ptr long) msvcrt.??_G__non_rtti_object@@UAEPAXI at Z
 @ thiscall -arch=win32 ??_Gbad_cast@@UAEPAXI at Z(ptr long) msvcrt.??_Gbad_cast@@UAEPAXI at Z
@@ -441,7 +441,7 @@
 @ stub -arch=win32 ??_Gstdiostream@@UAEPAXI at Z
 @ thiscall -arch=win32 ??_Gstreambuf@@UAEPAXI at Z(ptr long) msvcirt.??_Gstreambuf@@UAEPAXI at Z
 @ stub -arch=win32 ??_Gstrstream@@UAEPAXI at Z
-@ stub -arch=win32 ??_Gstrstreambuf@@UAEPAXI at Z
+@ thiscall -arch=win32 ??_Gstrstreambuf@@UAEPAXI at Z(ptr long) msvcirt.??_Gstrstreambuf@@UAEPAXI at Z
 @ cdecl -arch=win32 ?_query_new_handler@@YAP6AHI at ZXZ() msvcrt.?_query_new_handler@@YAP6AHI at ZXZ
 @ cdecl -arch=win64 ?_query_new_handler@@YAP6AH_K at ZXZ() msvcrt.?_query_new_handler@@YAP6AH_K at ZXZ
 @ cdecl ?_query_new_mode@@YAHXZ() msvcrt.?_query_new_mode@@YAHXZ
@@ -500,8 +500,8 @@
 @ cdecl -arch=win64 ?delbuf at ios@@QEBAHXZ(ptr) msvcirt.?delbuf at ios@@QEBAHXZ
 @ thiscall -arch=win32 ?doallocate at streambuf@@MAEHXZ(ptr) msvcirt.?doallocate at streambuf@@MAEHXZ
 @ cdecl -arch=win64 ?doallocate at streambuf@@MEAAHXZ(ptr) msvcirt.?doallocate at streambuf@@MEAAHXZ
-@ stub -arch=win32 ?doallocate at strstreambuf@@MAEHXZ
-@ stub -arch=win64 ?doallocate at strstreambuf@@MEAAHXZ
+@ thiscall -arch=win32 ?doallocate at strstreambuf@@MAEHXZ(ptr) msvcirt.?doallocate at strstreambuf@@MAEHXZ
+@ cdecl -arch=win64 ?doallocate at strstreambuf@@MEAAHXZ(ptr) msvcirt.?doallocate at strstreambuf@@MEAAHXZ
 @ stub -arch=win32 ?eatwhite at istream@@QAEXXZ
 @ stub -arch=win64 ?eatwhite at istream@@QEAAXXZ
 @ thiscall -arch=win32 ?eback at streambuf@@IBEPADXZ(ptr) msvcirt.?eback at streambuf@@IBEPADXZ
@@ -542,8 +542,8 @@
 @ stub -arch=win64 ?flush@@YAAEAVostream@@AEAV1@@Z
 @ stub -arch=win32 ?flush at ostream@@QAEAAV1 at XZ
 @ stub -arch=win64 ?flush at ostream@@QEAAAEAV1 at XZ
-@ stub -arch=win32 ?freeze at strstreambuf@@QAEXH at Z
-@ stub -arch=win64 ?freeze at strstreambuf@@QEAAXH at Z
+@ thiscall -arch=win32 ?freeze at strstreambuf@@QAEXH at Z(ptr long) msvcirt.?freeze at strstreambuf@@QAEXH at Z
+@ cdecl -arch=win64 ?freeze at strstreambuf@@QEAAXH at Z(ptr long) msvcirt.?freeze at strstreambuf@@QEAAXH at Z
 @ thiscall -arch=win32 ?gbump at streambuf@@IAEXH at Z(ptr long) msvcirt.?gbump at streambuf@@IAEXH at Z
 @ cdecl -arch=win64 ?gbump at streambuf@@IEAAXH at Z(ptr long) msvcirt.?gbump at streambuf@@IEAAXH at Z
 @ stub -arch=win32 ?gcount at istream@@QBEHXZ
@@ -636,8 +636,8 @@
 @ cdecl -arch=win64 ?overflow at filebuf@@UEAAHH at Z(ptr long) msvcirt.?overflow at filebuf@@UEAAHH at Z
 @ stub -arch=win32 ?overflow at stdiobuf@@UAEHH at Z
 @ stub -arch=win64 ?overflow at stdiobuf@@UEAAHH at Z
-@ stub -arch=win32 ?overflow at strstreambuf@@UAEHH at Z
-@ stub -arch=win64 ?overflow at strstreambuf@@UEAAHH at Z
+@ thiscall -arch=win32 ?overflow at strstreambuf@@UAEHH at Z(ptr long) msvcirt.?overflow at strstreambuf@@UAEHH at Z
+@ cdecl -arch=win64 ?overflow at strstreambuf@@UEAAHH at Z(ptr long) msvcirt.?overflow at strstreambuf@@UEAAHH at Z
 @ stub -arch=win32 ?pbackfail at stdiobuf@@UAEHH at Z
 @ stub -arch=win64 ?pbackfail at stdiobuf@@UEAAHH at Z
 @ thiscall -arch=win32 ?pbackfail at streambuf@@UAEHH at Z(ptr long) msvcirt.?pbackfail at streambuf@@UAEHH at Z
@@ -706,8 +706,8 @@
 @ stub -arch=win64 ?seekoff at stdiobuf@@UEAAJJW4seek_dir at ios@@H at Z
 @ thiscall -arch=win32 ?seekoff at streambuf@@UAEJJW4seek_dir at ios@@H at Z(ptr long long long) msvcirt.?seekoff at streambuf@@UAEJJW4seek_dir at ios@@H at Z
 @ cdecl -arch=win64 ?seekoff at streambuf@@UEAAJJW4seek_dir at ios@@H at Z(ptr long long long) msvcirt.?seekoff at streambuf@@UEAAJJW4seek_dir at ios@@H at Z
-@ stub -arch=win32 ?seekoff at strstreambuf@@UAEJJW4seek_dir at ios@@H at Z
-@ stub -arch=win64 ?seekoff at strstreambuf@@UEAAJJW4seek_dir at ios@@H at Z
+@ thiscall -arch=win32 ?seekoff at strstreambuf@@UAEJJW4seek_dir at ios@@H at Z(ptr long long long) msvcirt.?seekoff at strstreambuf@@UAEJJW4seek_dir at ios@@H at Z
+@ cdecl -arch=win64 ?seekoff at strstreambuf@@UEAAJJW4seek_dir at ios@@H at Z(ptr long long long) msvcirt.?seekoff at strstreambuf@@UEAAJJW4seek_dir at ios@@H at Z
 @ stub -arch=win32 ?seekp at ostream@@QAEAAV1 at J@Z
 @ stub -arch=win64 ?seekp at ostream@@QEAAAEAV1 at J@Z
 @ stub -arch=win32 ?seekp at ostream@@QAEAAV1 at JW4seek_dir@ios@@@Z
@@ -729,8 +729,8 @@
 @ stub -arch=win64 ?setbuf at ofstream@@QEAAPEAVstreambuf@@PEADH at Z
 @ thiscall -arch=win32 ?setbuf at streambuf@@UAEPAV1 at PADH@Z(ptr ptr long) msvcirt.?setbuf at streambuf@@UAEPAV1 at PADH@Z
 @ cdecl -arch=win64 ?setbuf at streambuf@@UEAAPEAV1 at PEADH@Z(ptr ptr long) msvcirt.?setbuf at streambuf@@UEAAPEAV1 at PEADH@Z
-@ stub -arch=win32 ?setbuf at strstreambuf@@UAEPAVstreambuf@@PADH at Z
-@ stub -arch=win64 ?setbuf at strstreambuf@@UEAAPEAVstreambuf@@PEADH at Z
+@ thiscall -arch=win32 ?setbuf at strstreambuf@@UAEPAVstreambuf@@PADH at Z(ptr ptr long) msvcirt.?setbuf at strstreambuf@@UAEPAVstreambuf@@PADH at Z
+@ cdecl -arch=win64 ?setbuf at strstreambuf@@UEAAPEAVstreambuf@@PEADH at Z(ptr ptr long) msvcirt.?setbuf at strstreambuf@@UEAAPEAVstreambuf@@PEADH at Z
 @ thiscall -arch=win32 ?setf at ios@@QAEJJ at Z(ptr long) msvcirt.?setf at ios@@QAEJJ at Z
 @ cdecl -arch=win64 ?setf at ios@@QEAAJJ at Z(ptr long) msvcirt.?setf at ios@@QEAAJJ at Z
 @ thiscall -arch=win32 ?setf at ios@@QAEJJJ at Z(ptr long long) msvcirt.?setf at ios@@QAEJJJ at Z
@@ -789,8 +789,8 @@
 @ stub -arch=win64 ?sync at stdiobuf@@UEAAHXZ
 @ thiscall -arch=win32 ?sync at streambuf@@UAEHXZ(ptr) msvcirt.?sync at streambuf@@UAEHXZ
 @ cdecl -arch=win64 ?sync at streambuf@@UEAAHXZ(ptr) msvcirt.?sync at streambuf@@UEAAHXZ
-@ stub -arch=win32 ?sync at strstreambuf@@UAEHXZ
-@ stub -arch=win64 ?sync at strstreambuf@@UEAAHXZ
+@ thiscall -arch=win32 ?sync at strstreambuf@@UAEHXZ(ptr) msvcirt.?sync at strstreambuf@@UAEHXZ
+@ cdecl -arch=win64 ?sync at strstreambuf@@UEAAHXZ(ptr) msvcirt.?sync at strstreambuf@@UEAAHXZ
 @ cdecl ?sync_with_stdio at ios@@SAXXZ() msvcirt.?sync_with_stdio at ios@@SAXXZ
 @ stub -arch=win32 ?tellg at istream@@QAEJXZ
 @ stub -arch=win64 ?tellg at istream@@QEAAJXZ
@@ -810,8 +810,8 @@
 @ cdecl -arch=win64 ?underflow at filebuf@@UEAAHXZ(ptr) msvcirt.?underflow at filebuf@@UEAAHXZ
 @ stub -arch=win32 ?underflow at stdiobuf@@UAEHXZ
 @ stub -arch=win64 ?underflow at stdiobuf@@UEAAHXZ
-@ stub -arch=win32 ?underflow at strstreambuf@@UAEHXZ
-@ stub -arch=win64 ?underflow at strstreambuf@@UEAAHXZ
+@ thiscall -arch=win32 ?underflow at strstreambuf@@UAEHXZ(ptr) msvcirt.?underflow at strstreambuf@@UAEHXZ
+@ cdecl -arch=win64 ?underflow at strstreambuf@@UEAAHXZ(ptr) msvcirt.?underflow at strstreambuf@@UEAAHXZ
 @ cdecl ?unexpected@@YAXXZ() msvcrt.?unexpected@@YAXXZ
 @ cdecl -arch=win32 ?unlock at ios@@QAAXXZ(ptr) msvcirt.?unlock at ios@@QAAXXZ
 @ cdecl -arch=win64 ?unlock at ios@@QEAAXXZ(ptr) msvcirt.?unlock at ios@@QEAAXXZ
-- 
2.1.4




More information about the wine-patches mailing list