diff --git a/headers/private/debug/DebugEventStream.h b/headers/private/debug/DebugEventStream.h index 9d356cbacd..a8be6f42e3 100644 --- a/headers/private/debug/DebugEventStream.h +++ b/headers/private/debug/DebugEventStream.h @@ -44,6 +44,8 @@ public: bool takeOverOwnership); void Unset(); + status_t Seek(off_t streamOffset); + ssize_t ReadNextEvent(uint32* _event, uint32* _cpu, const void** _buffer, off_t* _streamOffset = NULL); diff --git a/src/kits/debug/DebugEventStream.cpp b/src/kits/debug/DebugEventStream.cpp index 56df8d488d..422efe3645 100644 --- a/src/kits/debug/DebugEventStream.cpp +++ b/src/kits/debug/DebugEventStream.cpp @@ -116,6 +116,24 @@ BDebugEventInputStream::Unset() } +status_t +BDebugEventInputStream::Seek(off_t streamOffset) +{ + // TODO: Support for streams, at least for BPositionIOs. + if (fStream != NULL) + return B_UNSUPPORTED; + + if (streamOffset < 0 || streamOffset > fBufferCapacity) + return B_BUFFER_OVERFLOW; + + fStreamPosition = 0; + fBufferPosition = streamOffset; + fBufferSize = fBufferCapacity - streamOffset; + + return B_OK; +} + + /*! \brief Returns the next event in the stream. At the end of the stream \c 0 is returned and \c *_buffer is set to \c NULL. @@ -254,7 +272,7 @@ BDebugEventInputStream::_GetData(size_t size) fBufferCapacity - fBufferSize); if (bytesRead < 0) return bytesRead; - + fBufferSize += bytesRead; }