[PATCH 2/2] msvcirt: Impelment ifstream::setbuf().
Arkadiusz Hiler
ahiler at codeweavers.com
Fri Sep 4 02:57:22 CDT 2020
Signed-off-by: Arkadiusz Hiler <ahiler at codeweavers.com>
---
dlls/msvcirt/msvcirt.c | 19 +++++
dlls/msvcirt/msvcirt.spec | 4 +-
dlls/msvcirt/tests/msvcirt.c | 130 +++++++++++++++++++++++++++++++++++
dlls/msvcrt20/msvcrt20.spec | 4 +-
dlls/msvcrt40/msvcrt40.spec | 4 +-
5 files changed, 155 insertions(+), 6 deletions(-)
diff --git a/dlls/msvcirt/msvcirt.c b/dlls/msvcirt/msvcirt.c
index ab40ad36a28..3bd43d24709 100644
--- a/dlls/msvcirt/msvcirt.c
+++ b/dlls/msvcirt/msvcirt.c
@@ -4278,6 +4278,25 @@ void __thiscall ifstream_open(istream *this, const char *name, ios_open_mode mod
ios_clear(base, base->state | IOSTATE_failbit);
}
+/* ?setbuf at ifstream@@QAEPAVstreambuf@@PADH at Z */
+/* ?setbuf at ifstream@@QEAAPEAVstreambuf@@PEADH at Z */
+DEFINE_THISCALL_WRAPPER(ifstream_setbuf, 12)
+streambuf* __thiscall ifstream_setbuf(istream *this, char *buffer, int length)
+{
+ ios *base = istream_get_ios(this);
+ filebuf* fb = ifstream_rdbuf(this);
+
+ TRACE("(%p %p %d)\n", this, buffer, length);
+
+ if (filebuf_is_open(fb))
+ {
+ ios_clear(base, base->state | IOSTATE_failbit);
+ return NULL;
+ }
+
+ return filebuf_setbuf(fb, buffer, length);
+}
+
/* ?setmode at ifstream@@QAEHH at Z */
/* ?setmode at ifstream@@QEAAHH at Z */
DEFINE_THISCALL_WRAPPER(ifstream_setmode, 8)
diff --git a/dlls/msvcirt/msvcirt.spec b/dlls/msvcirt/msvcirt.spec
index 75ae312b486..c2b4b9d30eb 100644
--- a/dlls/msvcirt/msvcirt.spec
+++ b/dlls/msvcirt/msvcirt.spec
@@ -663,8 +663,8 @@
@ cdecl -arch=win64 ?setbuf at filebuf@@UEAAPEAVstreambuf@@PEADH at Z(ptr ptr long) filebuf_setbuf
@ stub -arch=win32 ?setbuf at fstream@@QAEPAVstreambuf@@PADH at Z # class streambuf * __thiscall fstream::setbuf(char *,int)
@ stub -arch=win64 ?setbuf at fstream@@QEAAPEAVstreambuf@@PEADH at Z
-@ stub -arch=win32 ?setbuf at ifstream@@QAEPAVstreambuf@@PADH at Z # class streambuf * __thiscall ifstream::setbuf(char *,int)
-@ stub -arch=win64 ?setbuf at ifstream@@QEAAPEAVstreambuf@@PEADH at Z
+@ thiscall -arch=win32 ?setbuf at ifstream@@QAEPAVstreambuf@@PADH at Z(ptr ptr long) ifstream_setbuf
+@ cdecl -arch=win64 ?setbuf at ifstream@@QEAAPEAVstreambuf@@PEADH at Z(ptr ptr long) ifstream_setbuf
@ stub -arch=win32 ?setbuf at ofstream@@QAEPAVstreambuf@@PADH at Z # class streambuf * __thiscall ofstream::setbuf(char *,int)
@ 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
diff --git a/dlls/msvcirt/tests/msvcirt.c b/dlls/msvcirt/tests/msvcirt.c
index a21ac20267c..d411e606f2e 100644
--- a/dlls/msvcirt/tests/msvcirt.c
+++ b/dlls/msvcirt/tests/msvcirt.c
@@ -418,6 +418,7 @@ static filedesc (*__thiscall p_ifstream_fd)(istream*);
static int (*__thiscall p_ifstream_is_open)(const istream*);
static void (*__thiscall p_ifstream_open)(istream*, const char*, ios_open_mode, int);
static filebuf* (*__thiscall p_ifstream_rdbuf)(const istream*);
+static streambuf* (*__thiscall p_ifstream_setbuf)(istream*, char*, int);
static int (*__thiscall p_ifstream_setmode)(istream*, int);
/* strstream */
@@ -733,6 +734,7 @@ static BOOL init(void)
SET(p_ifstream_is_open, "?is_open at ifstream@@QEBAHXZ");
SET(p_ifstream_open, "?open at ifstream@@QEAAXPEBDHH at Z");
SET(p_ifstream_rdbuf, "?rdbuf at ifstream@@QEBAPEAVfilebuf@@XZ");
+ SET(p_ifstream_setbuf, "?setbuf at ifstream@@QEAAPEAVstreambuf@@PEADH at Z");
SET(p_ifstream_setmode, "?setmode at ifstream@@QEAAHH at Z");
SET(p_strstream_copy_ctor, "??0strstream@@QEAA at AEBV0@@Z");
@@ -962,6 +964,7 @@ static BOOL init(void)
SET(p_ifstream_is_open, "?is_open at ifstream@@QBEHXZ");
SET(p_ifstream_open, "?open at ifstream@@QAEXPBDHH at Z");
SET(p_ifstream_rdbuf, "?rdbuf at ifstream@@QBEPAVfilebuf@@XZ");
+ SET(p_ifstream_setbuf, "?setbuf at ifstream@@QAEPAVstreambuf@@PADH at Z");
SET(p_ifstream_setmode, "?setmode at ifstream@@QAEHH at Z");
SET(p_strstream_copy_ctor, "??0strstream@@QAE at ABV0@@Z");
@@ -6831,6 +6834,7 @@ static void test_ifstream(void)
{
const char *filename = "ifstream_test";
istream ifs, ifs_copy, *pifs;
+ streambuf *psb;
filebuf *pfb;
char buffer[64];
char st[8];
@@ -6926,6 +6930,132 @@ static void test_ifstream(void)
call_func1(p_ifstream_vbase_dtor, &ifs);
ok(_close(fd) == -1, "expected ifstream to close opened file\n");
+ /* setbuf */
+ call_func5(p_ifstream_buffer_ctor, &ifs, -1, NULL, 0, TRUE);
+ ok(ifs.base_ios.sb->base == NULL, "wrong base value, expected NULL got %p\n", ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == NULL, "wrong ebuf value, expected NULL got %p\n", ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 1, "wrong unbuffered value, expected 1 got %d\n", pfb->base.unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+
+ psb = call_func3(p_ifstream_setbuf, &ifs, buffer, ARRAY_SIZE(buffer));
+ ok(psb == ifs.base_ios.sb, "wrong return, expected %p got %p\n", ifs.base_ios.sb, psb);
+ ok(ifs.base_ios.sb->base == buffer, "wrong buffer, expected %p got %p\n", buffer, ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == buffer + ARRAY_SIZE(buffer), "wrong ebuf, expected %p got %p\n", buffer + ARRAY_SIZE(buffer), ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 1, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == IOSTATE_goodbit, "expected %d got %d\n", IOSTATE_goodbit, ifs.base_ios.state);
+
+ psb = call_func3(p_ifstream_setbuf, &ifs, NULL, 0);
+ ok(psb == ifs.base_ios.sb, "wrong return, expected %p got %p\n", ifs.base_ios.sb, psb);
+ ok(ifs.base_ios.sb->base == buffer, "wrong buffer, expected %p got %p\n", buffer, ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == buffer + ARRAY_SIZE(buffer), "wrong ebuf, expected %p got %p\n", buffer + ARRAY_SIZE(buffer), ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 1, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == IOSTATE_goodbit, "expected %d got %d\n", IOSTATE_goodbit, ifs.base_ios.state);
+ call_func1(p_ifstream_vbase_dtor, &ifs);
+
+ call_func2(p_ifstream_ctor, &ifs, TRUE);
+ ok(ifs.base_ios.sb->base == NULL, "wrong base value, expected NULL got %p\n", ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == NULL, "wrong ebuf value, expected NULL got %p\n", ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 0, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == IOSTATE_goodbit, "expected %d got %d\n", IOSTATE_goodbit, ifs.base_ios.state);
+
+ psb = call_func3(p_ifstream_setbuf, &ifs, buffer, ARRAY_SIZE(buffer));
+ ok(psb == ifs.base_ios.sb, "wrong return, expected %p got %p\n", ifs.base_ios.sb, psb);
+ ok(ifs.base_ios.sb->base == buffer, "wrong buffer, expected %p got %p\n", buffer, ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == buffer + ARRAY_SIZE(buffer), "wrong ebuf, expected %p got %p\n", buffer + ARRAY_SIZE(buffer), ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 0, "wrong unbuffered value, expected 0 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == IOSTATE_goodbit, "expected %d got %d\n", IOSTATE_goodbit, ifs.base_ios.state);
+
+ psb = call_func3(p_ifstream_setbuf, &ifs, NULL, 0);
+ ok(psb == ifs.base_ios.sb, "wrong return, expected %p got %p\n", ifs.base_ios.sb, psb);
+ ok(ifs.base_ios.sb->base == buffer, "wrong buffer, expected %p got %p\n", buffer, ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == buffer + ARRAY_SIZE(buffer), "wrong ebuf, expected %p got %p\n", buffer + ARRAY_SIZE(buffer), ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 1, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == IOSTATE_goodbit, "expected %d got %d\n", IOSTATE_goodbit, ifs.base_ios.state);
+
+ psb = call_func3(p_ifstream_setbuf, &ifs, buffer + 8, ARRAY_SIZE(buffer) - 8);
+ ok(psb == ifs.base_ios.sb, "wrong return, expected %p got %p\n", ifs.base_ios.sb, psb);
+ ok(ifs.base_ios.sb->base == buffer + 8, "wrong buffer, expected %p got %p\n", buffer + 8, ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == buffer + ARRAY_SIZE(buffer), "wrong ebuf, expected %p got %p\n", buffer + ARRAY_SIZE(buffer), ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 1, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == IOSTATE_goodbit, "expected %d got %d\n", IOSTATE_goodbit, ifs.base_ios.state);
+
+ psb = call_func3(p_ifstream_setbuf, &ifs, buffer + 8, 0);
+ ok(psb == ifs.base_ios.sb, "wrong return, expected %p got %p\n", ifs.base_ios.sb, psb);
+ ok(ifs.base_ios.sb->base == buffer + 8, "wrong buffer, expected %p got %p\n", buffer + 8, ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == buffer + ARRAY_SIZE(buffer), "wrong ebuf, expected %p got %p\n", buffer + ARRAY_SIZE(buffer), ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 1, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == IOSTATE_goodbit, "expected %d got %d\n", IOSTATE_goodbit, ifs.base_ios.state);
+
+ psb = call_func3(p_ifstream_setbuf, &ifs, buffer + 4, ARRAY_SIZE(buffer) - 4);
+ ok(psb == ifs.base_ios.sb, "wrong return, expected %p got %p\n", ifs.base_ios.sb, psb);
+ ok(ifs.base_ios.sb->base == buffer + 4, "wrong buffer, expected %p got %p\n", buffer + 4, ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == buffer + ARRAY_SIZE(buffer), "wrong ebuf, expected %p got %p\n", buffer + ARRAY_SIZE(buffer), ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 1, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == IOSTATE_goodbit, "expected %d got %d\n", IOSTATE_goodbit, ifs.base_ios.state);
+
+ psb = call_func3(p_ifstream_setbuf, &ifs, NULL, 5);
+ ok(psb == ifs.base_ios.sb, "wrong return, expected %p got %p\n", ifs.base_ios.sb, psb);
+ ok(ifs.base_ios.sb->base == buffer + 4, "wrong buffer, expected %p got %p\n", buffer + 4, ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == buffer + ARRAY_SIZE(buffer), "wrong ebuf, expected %p got %p\n", buffer + ARRAY_SIZE(buffer), ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 1, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == IOSTATE_goodbit, "expected %d got %d\n", IOSTATE_goodbit, ifs.base_ios.state);
+ call_func1(p_ifstream_vbase_dtor, &ifs);
+
+ /* setbuf - seems to be a nop and always return NULL in those other cases */
+ pifs = call_func5(p_ifstream_buffer_ctor, &ifs, 42, NULL, 0, TRUE);
+ ok(ifs.base_ios.sb->base == NULL, "wrong base value, expected NULL got %p\n", ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == NULL, "wrong ebuf value, expected NULL got %p\n", ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 1, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+
+ ifs.base_ios.state = IOSTATE_eofbit;
+ psb = call_func3(p_ifstream_setbuf, &ifs, buffer, ARRAY_SIZE(buffer));
+ ok(psb == NULL, "wrong return, expected NULL got %p\n", psb);
+ ok(ifs.base_ios.sb->base == NULL, "wrong base value, expected NULL got %p\n", ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == NULL, "wrong ebuf value, expected NULL got %p\n", ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 1, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == (IOSTATE_eofbit | IOSTATE_failbit), "attaching on already setup stream did not set failbit\n");
+
+ ifs.base_ios.state = IOSTATE_eofbit;
+ psb = call_func3(p_ifstream_setbuf, &ifs, NULL, 0);
+ ok(psb == NULL, "wrong return, expected NULL got %p\n", psb);
+ ok(ifs.base_ios.sb->base == NULL, "wrong base value, expected NULL got %p\n", ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf == NULL, "wrong ebuf value, expected NULL got %p\n", ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 1, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 0, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == (IOSTATE_eofbit | IOSTATE_failbit), "attaching on already setup stream did not set failbit\n");
+ call_func1(p_ifstream_vbase_dtor, &ifs);
+
+ pifs = call_func5(p_ifstream_open_ctor, &ifs, filename, OPENMODE_in, filebuf_openprot, TRUE);
+ ifs.base_ios.state = IOSTATE_eofbit;
+ psb = call_func3(p_ifstream_setbuf, &ifs, NULL, 0);
+ ok(psb == NULL, "wrong return, expected NULL got %p\n", psb);
+ ok(ifs.base_ios.sb->base != NULL, "wrong base value, expected NULL got %p\n", ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->ebuf != NULL, "wrong ebuf value, expected NULL got %p\n", ifs.base_ios.sb->ebuf);
+ ok(ifs.base_ios.sb->unbuffered == 0, "wrong unbuffered value, expected 0 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 1, "wrong allocated value, expected 1 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == (IOSTATE_eofbit | IOSTATE_failbit), "attaching on already setup stream did not set failbit\n");
+
+ ifs.base_ios.state = IOSTATE_eofbit;
+ psb = call_func3(p_ifstream_setbuf, &ifs, buffer, ARRAY_SIZE(buffer));
+ ok(psb == NULL, "wrong return, expected NULL got %p\n", psb);
+ ok(ifs.base_ios.sb->base != NULL, "wrong base value, expected NULL got %p\n", ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->base != buffer, "wrong base value, expected not %p got %p\n", buffer, ifs.base_ios.sb->base);
+ ok(ifs.base_ios.sb->unbuffered == 0, "wrong unbuffered value, expected 1 got %d\n", ifs.base_ios.sb->unbuffered);
+ ok(ifs.base_ios.sb->allocated == 1, "wrong allocated value, expected 0 got %d\n", ifs.base_ios.sb->allocated);
+ ok(ifs.base_ios.state == (IOSTATE_eofbit | IOSTATE_failbit), "attaching on already setup stream did not set failbit\n");
+ call_func1(p_ifstream_vbase_dtor, &ifs);
+
/* attach */
pifs = call_func2(p_ifstream_ctor, &ifs, TRUE);
pfb = (filebuf*) ifs.base_ios.sb;
diff --git a/dlls/msvcrt20/msvcrt20.spec b/dlls/msvcrt20/msvcrt20.spec
index 96c6c681478..2ce72c6b13c 100644
--- a/dlls/msvcrt20/msvcrt20.spec
+++ b/dlls/msvcrt20/msvcrt20.spec
@@ -651,8 +651,8 @@
@ cdecl -arch=win64 ?setbuf at filebuf@@UEAAPEAVstreambuf@@PEADH at Z(ptr ptr long) msvcirt.?setbuf at filebuf@@UEAAPEAVstreambuf@@PEADH at Z
@ stub -arch=win32 ?setbuf at fstream@@QAEPAVstreambuf@@PADH at Z
@ stub -arch=win64 ?setbuf at fstream@@QEAAPEAVstreambuf@@PEADH at Z
-@ stub -arch=win32 ?setbuf at ifstream@@QAEPAVstreambuf@@PADH at Z
-@ stub -arch=win64 ?setbuf at ifstream@@QEAAPEAVstreambuf@@PEADH at Z
+@ thiscall -arch=win32 ?setbuf at ifstream@@QAEPAVstreambuf@@PADH at Z(ptr ptr long) msvcirt.?setbuf at ifstream@@QAEPAVstreambuf@@PADH at Z
+@ cdecl -arch=win64 ?setbuf at ifstream@@QEAAPEAVstreambuf@@PEADH at Z(ptr ptr long) msvcirt.?setbuf at ifstream@@QEAAPEAVstreambuf@@PEADH at Z
@ stub -arch=win32 ?setbuf at ofstream@@QAEPAVstreambuf@@PADH at Z
@ 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
diff --git a/dlls/msvcrt40/msvcrt40.spec b/dlls/msvcrt40/msvcrt40.spec
index 6a2c9a7e52e..efa3e3251d6 100644
--- a/dlls/msvcrt40/msvcrt40.spec
+++ b/dlls/msvcrt40/msvcrt40.spec
@@ -723,8 +723,8 @@
@ cdecl -arch=win64 ?setbuf at filebuf@@UEAAPEAVstreambuf@@PEADH at Z(ptr ptr long) msvcirt.?setbuf at filebuf@@UEAAPEAVstreambuf@@PEADH at Z
@ stub -arch=win32 ?setbuf at fstream@@QAEPAVstreambuf@@PADH at Z
@ stub -arch=win64 ?setbuf at fstream@@QEAAPEAVstreambuf@@PEADH at Z
-@ stub -arch=win32 ?setbuf at ifstream@@QAEPAVstreambuf@@PADH at Z
-@ stub -arch=win64 ?setbuf at ifstream@@QEAAPEAVstreambuf@@PEADH at Z
+@ thiscall -arch=win32 ?setbuf at ifstream@@QAEPAVstreambuf@@PADH at Z(ptr ptr long) msvcirt.?setbuf at ifstream@@QAEPAVstreambuf@@PADH at Z
+@ cdecl -arch=win64 ?setbuf at ifstream@@QEAAPEAVstreambuf@@PEADH at Z(ptr ptr long) msvcirt.?setbuf at ifstream@@QEAAPEAVstreambuf@@PEADH at Z
@ stub -arch=win32 ?setbuf at ofstream@@QAEPAVstreambuf@@PADH at Z
@ 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
--
2.28.0
More information about the wine-devel
mailing list