From ffe520cb6dc1068e07c21ee951587f9a26aa563d Mon Sep 17 00:00:00 2001 From: the-nerbs Date: Sun, 6 Aug 2023 20:46:27 -0400 Subject: [PATCH] Update wxMemoryInputStream::Peek to set last read count. This aligns the memory stream's Peek with other streams' Peek impls by making it set the last read count to 1 when it successfully peeks a character, or 0 when it does not. While the formal docs do not link Peek to LastCount directly, the in-source comments on the declaration of both wxInputStream::Peek and wxInputStream::LastRead both indicate that Peek will set the last read count. --- src/common/mstream.cpp | 2 ++ tests/streams/bstream.h | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/src/common/mstream.cpp b/src/common/mstream.cpp index 9df71df414..b8aaa4765b 100644 --- a/src/common/mstream.cpp +++ b/src/common/mstream.cpp @@ -112,10 +112,12 @@ char wxMemoryInputStream::Peek() if ( pos == m_length ) { m_lasterror = wxSTREAM_READ_ERROR; + m_lastcount = 0; return 0; } + m_lastcount = 1; return buf[pos]; } diff --git a/tests/streams/bstream.h b/tests/streams/bstream.h index c7381844e9..e01c054d56 100644 --- a/tests/streams/bstream.h +++ b/tests/streams/bstream.h @@ -253,9 +253,17 @@ protected: while (stream_in.IsOk()) { char peekChar = stream_in.Peek(); + size_t peekLastRead = stream_in.LastRead(); + char getChar = stream_in.GetC(); + + // Peek and GetC should retrieve the same 0 or 1 characters. + CPPUNIT_ASSERT_EQUAL(peekLastRead, stream_in.LastRead()); + if (stream_in.LastRead() == 1) + { CPPUNIT_ASSERT_EQUAL(getChar, peekChar); + } } }