Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0766ead6 authored by xiahong.bao's avatar xiahong.bao
Browse files

Fix logic error in SkipCutBuffer.cpp



When allocate a new larger buffer, as it is a ring buffer, if
mWriteHead < mReadHead, it means available data isn't continuous,
so need to call memcpy twice to move previous data to new buffer.

Signed-off-by: default avatarxiahong.bao <xiahong.bao@nxp.com>
Change-Id: Idcdb61c3bb777cf13fd8805f22c862ccc200dbd4
parent 0ebafd1b
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -145,7 +145,19 @@ void SkipCutBuffer::write(const char *src, size_t num) {
    if (available < num) {
        int32_t newcapacity = mCapacity + (num - available);
        char * newbuffer = new char[newcapacity];
        memcpy(newbuffer, mCutBuffer, mCapacity);
        if (mWriteHead < mReadHead) {
            // data isn't continuous, need to memcpy twice
            // to move previous data to new buffer.
            size_t copyLeft = mCapacity - mReadHead;
            memcpy(newbuffer, mCutBuffer + mReadHead, copyLeft);
            memcpy(newbuffer + copyLeft, mCutBuffer, mWriteHead);
            mReadHead = 0;
            mWriteHead += copyLeft;
        } else {
            memcpy(newbuffer, mCutBuffer + mReadHead, mWriteHead - mReadHead);
            mWriteHead -= mReadHead;
            mReadHead = 0;
        }
        delete [] mCutBuffer;
        mCapacity = newcapacity;
        mCutBuffer = newbuffer;