diff options
Diffstat (limited to 'io/source/stm/streamhelper.cxx')
-rw-r--r-- | io/source/stm/streamhelper.cxx | 29 |
1 files changed, 15 insertions, 14 deletions
diff --git a/io/source/stm/streamhelper.cxx b/io/source/stm/streamhelper.cxx index 2eace1e70d4c..4a2df5891be1 100644 --- a/io/source/stm/streamhelper.cxx +++ b/io/source/stm/streamhelper.cxx @@ -68,21 +68,22 @@ void MemRingBuffer::resizeBuffer( sal_Int32 nMinSize ) nNewLen = m_nBufferLen; } - if( nNewLen != m_nBufferLen ) { - if (auto p = static_cast<sal_Int8*>(std::realloc(m_p, nNewLen))) - m_p = p; - else - { - throw css::io::BufferSizeExceededException( - "MemRingBuffer::resizeBuffer BufferSizeExceededException"); - } - - if( m_nStart + m_nOccupiedBuffer > m_nBufferLen ) { - memmove( &( m_p[m_nStart+(nNewLen-m_nBufferLen)]) , &(m_p[m_nStart]) , m_nBufferLen - m_nStart ); - m_nStart += nNewLen - m_nBufferLen; - } - m_nBufferLen = nNewLen; + if( nNewLen == m_nBufferLen ) + return; + + auto p = static_cast<sal_Int8*>(std::realloc(m_p, nNewLen)); + if (!p) + throw css::io::BufferSizeExceededException( + "MemRingBuffer::resizeBuffer BufferSizeExceededException"); + + m_p = p; + + + if( m_nStart + m_nOccupiedBuffer > m_nBufferLen ) { + memmove( &( m_p[m_nStart+(nNewLen-m_nBufferLen)]) , &(m_p[m_nStart]) , m_nBufferLen - m_nStart ); + m_nStart += nNewLen - m_nBufferLen; } + m_nBufferLen = nNewLen; } |