From a3150b95dffc9b06413e1941a33d44eba76b2364 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Iv=C3=A1n=20Matellanes?= Date: Mon, 8 Jun 2015 21:26:51 +0200 Subject: [PATCH] msvcirt: Add implementation of streambuf::gbump/pbump. --- dlls/msvcirt/msvcirt.c | 18 ++++++++++++++++++ dlls/msvcirt/msvcirt.spec | 8 ++++---- dlls/msvcirt/tests/msvcirt.c | 23 +++++++++++++++++++++++ dlls/msvcrt20/msvcrt20.spec | 8 ++++---- dlls/msvcrt40/msvcrt40.spec | 8 ++++---- 5 files changed, 53 insertions(+), 12 deletions(-) diff --git a/dlls/msvcirt/msvcirt.c b/dlls/msvcirt/msvcirt.c index afb673d347a..a5b71411ae3 100644 --- a/dlls/msvcirt/msvcirt.c +++ b/dlls/msvcirt/msvcirt.c @@ -317,6 +317,24 @@ CRITICAL_SECTION* __thiscall streambuf_lockptr(streambuf *this) return &this->lock; } +/* ?gbump@streambuf@@IAEXH@Z */ +/* ?gbump@streambuf@@IEAAXH@Z */ +DEFINE_THISCALL_WRAPPER(streambuf_gbump, 8) +void __thiscall streambuf_gbump(streambuf *this, int count) +{ + TRACE("(%p %d)\n", this, count); + this->gptr += count; +} + +/* ?pbump@streambuf@@IAEXH@Z */ +/* ?pbump@streambuf@@IEAAXH@Z */ +DEFINE_THISCALL_WRAPPER(streambuf_pbump, 8) +void __thiscall streambuf_pbump(streambuf *this, int count) +{ + TRACE("(%p %d)\n", this, count); + this->pptr += count; +} + /* Unexported */ DEFINE_THISCALL_WRAPPER(streambuf_overflow, 8) int __thiscall streambuf_overflow(streambuf *this, int c) diff --git a/dlls/msvcirt/msvcirt.spec b/dlls/msvcirt/msvcirt.spec index d40ea47949a..576b905b307 100644 --- a/dlls/msvcirt/msvcirt.spec +++ b/dlls/msvcirt/msvcirt.spec @@ -491,8 +491,8 @@ @ stub -arch=win64 ?flush@ostream@@QEAAAEAV1@XZ @ stub -arch=win32 ?freeze@strstreambuf@@QAEXH@Z # void __thiscall strstreambuf::freeze(int) @ stub -arch=win64 ?freeze@strstreambuf@@QEAAXH@Z -@ stub -arch=win32 ?gbump@streambuf@@IAEXH@Z # void __thiscall streambuf::gbump(int) -@ stub -arch=win64 ?gbump@streambuf@@IEAAXH@Z +@ thiscall -arch=win32 ?gbump@streambuf@@IAEXH@Z(ptr long) streambuf_gbump +@ cdecl -arch=win64 ?gbump@streambuf@@IEAAXH@Z(ptr long) streambuf_gbump @ stub -arch=win32 ?gcount@istream@@QBEHXZ # int __thiscall istream::gcount(void)const @ stub -arch=win64 ?gcount@istream@@QEBAHXZ @ stub -arch=win32 ?get@istream@@IAEAAV1@PADHH@Z # class istream & __thiscall istream::get(char *,int,int) @@ -589,8 +589,8 @@ @ cdecl -arch=win64 ?pbackfail@streambuf@@UEAAHH@Z(ptr long) streambuf_pbackfail @ thiscall -arch=win32 ?pbase@streambuf@@IBEPADXZ(ptr) streambuf_pbase @ cdecl -arch=win64 ?pbase@streambuf@@IEBAPEADXZ(ptr) streambuf_pbase -@ stub -arch=win32 ?pbump@streambuf@@IAEXH@Z # void __thiscall streambuf::pbump(int) -@ stub -arch=win64 ?pbump@streambuf@@IEAAXH@Z +@ thiscall -arch=win32 ?pbump@streambuf@@IAEXH@Z(ptr long) streambuf_pbump +@ cdecl -arch=win64 ?pbump@streambuf@@IEAAXH@Z(ptr long) streambuf_pbump @ stub -arch=win32 ?pcount@ostrstream@@QBEHXZ # int __thiscall ostrstream::pcount(void)const @ stub -arch=win64 ?pcount@ostrstream@@QEBAHXZ @ stub -arch=win32 ?pcount@strstream@@QBEHXZ # int __thiscall strstream::pcount(void)const diff --git a/dlls/msvcirt/tests/msvcirt.c b/dlls/msvcirt/tests/msvcirt.c index 3c2c5cef9de..2a45b04980b 100644 --- a/dlls/msvcirt/tests/msvcirt.c +++ b/dlls/msvcirt/tests/msvcirt.c @@ -55,7 +55,9 @@ static void (*__thiscall p_streambuf_dtor)(streambuf*); static int (*__thiscall p_streambuf_allocate)(streambuf*); static void (*__thiscall p_streambuf_clrclock)(streambuf*); static int (*__thiscall p_streambuf_doallocate)(streambuf*); +static void (*__thiscall p_streambuf_gbump)(streambuf*, int); static void (*__thiscall p_streambuf_lock)(streambuf*); +static void (*__thiscall p_streambuf_pbump)(streambuf*, int); static void (*__thiscall p_streambuf_setb)(streambuf*, char*, char*, int); static void (*__thiscall p_streambuf_setlock)(streambuf*); static streambuf* (*__thiscall p_streambuf_setbuf)(streambuf*, char*, int); @@ -136,7 +138,9 @@ static BOOL init(void) SET(p_streambuf_allocate, "?allocate@streambuf@@IEAAHXZ"); SET(p_streambuf_clrclock, "?clrlock@streambuf@@QEAAXXZ"); SET(p_streambuf_doallocate, "?doallocate@streambuf@@MEAAHXZ"); + SET(p_streambuf_gbump, "?gbump@streambuf@@IEAAXH@Z"); SET(p_streambuf_lock, "?lock@streambuf@@QEAAXXZ"); + SET(p_streambuf_pbump, "?pbump@streambuf@@IEAAXH@Z"); SET(p_streambuf_setb, "?setb@streambuf@@IEAAXPEAD0H@Z"); SET(p_streambuf_setbuf, "?setbuf@streambuf@@UEAAPEAV1@PEADH@Z"); SET(p_streambuf_setlock, "?setlock@streambuf@@QEAAXXZ"); @@ -148,7 +152,9 @@ static BOOL init(void) SET(p_streambuf_allocate, "?allocate@streambuf@@IAEHXZ"); SET(p_streambuf_clrclock, "?clrlock@streambuf@@QAEXXZ"); SET(p_streambuf_doallocate, "?doallocate@streambuf@@MAEHXZ"); + SET(p_streambuf_gbump, "?gbump@streambuf@@IAEXH@Z"); SET(p_streambuf_lock, "?lock@streambuf@@QAEXXZ"); + SET(p_streambuf_pbump, "?pbump@streambuf@@IAEXH@Z"); SET(p_streambuf_setb, "?setb@streambuf@@IAEXPAD0H@Z"); SET(p_streambuf_setbuf, "?setbuf@streambuf@@UAEPAV1@PADH@Z"); SET(p_streambuf_setlock, "?setlock@streambuf@@QAEXXZ"); @@ -318,6 +324,23 @@ static void test_streambuf(void) ok(sb2.allocated == 1, "wrong allocate value, expected 1 got %d\n", sb2.allocated); ok(sb2.ebuf - sb2.base == 512 , "wrong reserve area size, expected 512 got %p-%p\n", sb2.ebuf, sb2.base); + /* gbump */ + sb.eback = sb.base + 100; + sb.gptr = sb.base + 104; + sb.egptr = sb.base + 110; + call_func2(p_streambuf_gbump, &sb, 10); + ok(sb.gptr == sb.eback + 14, "advance get pointer failed, expected %p got %p\n", sb.eback + 14, sb.gptr); + call_func2(p_streambuf_gbump, &sb, -15); + ok(sb.gptr == sb.eback - 1, "advance get pointer failed, expected %p got %p\n", sb.eback - 1, sb.gptr); + + /* pbump */ + sb.pbase = sb.pptr = sb.base + 200; + sb.epptr = sb.base + 210; + call_func2(p_streambuf_pbump, &sb, -2); + ok(sb.pptr == sb.pbase - 2, "advance put pointer failed, expected %p got %p\n", sb.pbase - 2, sb.pptr); + call_func2(p_streambuf_pbump, &sb, 20); + ok(sb.pptr == sb.pbase + 18, "advance put pointer failed, expected %p got %p\n", sb.pbase + 18, sb.pptr); + SetEvent(lock_arg.test[3]); WaitForSingleObject(thread, INFINITE); diff --git a/dlls/msvcrt20/msvcrt20.spec b/dlls/msvcrt20/msvcrt20.spec index aff7bdccc75..5f43568d040 100644 --- a/dlls/msvcrt20/msvcrt20.spec +++ b/dlls/msvcrt20/msvcrt20.spec @@ -479,8 +479,8 @@ @ stub -arch=win64 ?flush@ostream@@QEAAAEAV1@XZ @ stub -arch=win32 ?freeze@strstreambuf@@QAEXH@Z @ stub -arch=win64 ?freeze@strstreambuf@@QEAAXH@Z -@ stub -arch=win32 ?gbump@streambuf@@IAEXH@Z -@ stub -arch=win64 ?gbump@streambuf@@IEAAXH@Z +@ thiscall -arch=win32 ?gbump@streambuf@@IAEXH@Z(ptr long) msvcirt.?gbump@streambuf@@IAEXH@Z +@ cdecl -arch=win64 ?gbump@streambuf@@IEAAXH@Z(ptr long) msvcirt.?gbump@streambuf@@IEAAXH@Z @ stub -arch=win32 ?gcount@istream@@QBEHXZ @ stub -arch=win64 ?gcount@istream@@QEBAHXZ @ stub -arch=win32 ?get@istream@@QAEAAV1@AAC@Z @@ -575,8 +575,8 @@ @ cdecl -arch=win64 ?pbackfail@streambuf@@UEAAHH@Z(ptr long) msvcirt.?pbackfail@streambuf@@UEAAHH@Z @ thiscall -arch=win32 ?pbase@streambuf@@IBEPADXZ(ptr) msvcirt.?pbase@streambuf@@IBEPADXZ @ cdecl -arch=win64 ?pbase@streambuf@@IEBAPEADXZ(ptr) msvcirt.?pbase@streambuf@@IEBAPEADXZ -@ stub -arch=win32 ?pbump@streambuf@@IAEXH@Z -@ stub -arch=win64 ?pbump@streambuf@@IEAAXH@Z +@ thiscall -arch=win32 ?pbump@streambuf@@IAEXH@Z(ptr long) msvcirt.?pbump@streambuf@@IAEXH@Z +@ cdecl -arch=win64 ?pbump@streambuf@@IEAAXH@Z(ptr long) msvcirt.?pbump@streambuf@@IEAAXH@Z @ stub -arch=win32 ?pcount@ostrstream@@QBEHXZ @ stub -arch=win64 ?pcount@ostrstream@@QEBAHXZ @ stub -arch=win32 ?pcount@strstream@@QBEHXZ diff --git a/dlls/msvcrt40/msvcrt40.spec b/dlls/msvcrt40/msvcrt40.spec index 4574502ebbc..81cdcf96aa0 100644 --- a/dlls/msvcrt40/msvcrt40.spec +++ b/dlls/msvcrt40/msvcrt40.spec @@ -544,8 +544,8 @@ @ stub -arch=win64 ?flush@ostream@@QEAAAEAV1@XZ @ stub -arch=win32 ?freeze@strstreambuf@@QAEXH@Z @ stub -arch=win64 ?freeze@strstreambuf@@QEAAXH@Z -@ stub -arch=win32 ?gbump@streambuf@@IAEXH@Z -@ stub -arch=win64 ?gbump@streambuf@@IEAAXH@Z +@ thiscall -arch=win32 ?gbump@streambuf@@IAEXH@Z(ptr long) msvcirt.?gbump@streambuf@@IAEXH@Z +@ cdecl -arch=win64 ?gbump@streambuf@@IEAAXH@Z(ptr long) msvcirt.?gbump@streambuf@@IEAAXH@Z @ stub -arch=win32 ?gcount@istream@@QBEHXZ @ stub -arch=win64 ?gcount@istream@@QEBAHXZ @ stub -arch=win32 ?get@istream@@IAEAAV1@PADHH@Z @@ -644,8 +644,8 @@ @ cdecl -arch=win64 ?pbackfail@streambuf@@UEAAHH@Z(ptr long) msvcirt.?pbackfail@streambuf@@UEAAHH@Z @ thiscall -arch=win32 ?pbase@streambuf@@IBEPADXZ(ptr) msvcirt.?pbase@streambuf@@IBEPADXZ @ cdecl -arch=win64 ?pbase@streambuf@@IEBAPEADXZ(ptr) msvcirt.?pbase@streambuf@@IEBAPEADXZ -@ stub -arch=win32 ?pbump@streambuf@@IAEXH@Z -@ stub -arch=win64 ?pbump@streambuf@@IEAAXH@Z +@ thiscall -arch=win32 ?pbump@streambuf@@IAEXH@Z(ptr long) msvcirt.?pbump@streambuf@@IAEXH@Z +@ cdecl -arch=win64 ?pbump@streambuf@@IEAAXH@Z(ptr long) msvcirt.?pbump@streambuf@@IEAAXH@Z @ stub -arch=win32 ?pcount@ostrstream@@QBEHXZ @ stub -arch=win64 ?pcount@ostrstream@@QEBAHXZ @ stub -arch=win32 ?pcount@strstream@@QBEHXZ -- 2.11.4.GIT