diff options
author | Caolán McNamara <caolanm@redhat.com> | 2017-03-13 16:30:52 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2017-03-13 20:19:10 +0000 |
commit | ee555c835aac8e21f0a08e7c9d513182728a4cfe (patch) | |
tree | e34598de24df6c08b4ae7f1737891e329d0c64ae /tools | |
parent | befafd4f8d58f81ac9cb0e4ef8dfbda9373787f7 (diff) |
merge these similar buffer flushes together
adds an extra SVSTREAM_WRITE_ERROR check to some of them, otherwise
they're all the same
Change-Id: I2a4c766ff267a246a9f126fa9b7d557cfa2d66b0
Reviewed-on: https://gerrit.libreoffice.org/35144
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'tools')
-rw-r--r-- | tools/source/stream/stream.cxx | 66 |
1 files changed, 19 insertions, 47 deletions
diff --git a/tools/source/stream/stream.cxx b/tools/source/stream/stream.cxx index fa69f58e31e3..f838edbf6087 100644 --- a/tools/source/stream/stream.cxx +++ b/tools/source/stream/stream.cxx @@ -1196,6 +1196,19 @@ SvStream& SvStream::WriteUniOrByteString( const OUString& rStr, rtl_TextEncoding return *this; } +void SvStream::FlushBuffer(bool isConsistent) +{ + if (m_isDirty && isConsistent) // Does stream require a flush? + { + SeekPos(m_nBufFilePos); + if (m_nCryptMask) + CryptAndWriteBuffer(m_pRWBuf, m_nBufActualLen); + else if (PutData(m_pRWBuf, m_nBufActualLen) != m_nBufActualLen) + SetError(SVSTREAM_WRITE_ERROR); + m_isDirty = false; + } +} + std::size_t SvStream::ReadBytes( void* pData, std::size_t nCount ) { std::size_t nSaveCount = nCount; @@ -1225,15 +1238,7 @@ std::size_t SvStream::ReadBytes( void* pData, std::size_t nCount ) } else { - if (m_isDirty) // Does stream require a flush? - { - SeekPos(m_nBufFilePos); - if (m_nCryptMask) - CryptAndWriteBuffer(m_pRWBuf, m_nBufActualLen); - else - PutData(m_pRWBuf, m_nBufActualLen); - m_isDirty = false; - } + FlushBuffer(true); // Does data block fit into buffer? if (nCount > m_nBufSize) @@ -1288,6 +1293,7 @@ std::size_t SvStream::WriteBytes( const void* pData, std::size_t nCount ) { if( !nCount ) return 0; + if (!m_isWritable) { SetError( ERRCODE_IO_CANTWRITE ); @@ -1321,16 +1327,7 @@ std::size_t SvStream::WriteBytes( const void* pData, std::size_t nCount ) } else { - // Does stream require flushing? - if (m_isDirty) - { - SeekPos(m_nBufFilePos); - if (m_nCryptMask) - CryptAndWriteBuffer( m_pRWBuf, (std::size_t)m_nBufActualLen ); - else - PutData( m_pRWBuf, m_nBufActualLen ); - m_isDirty = false; - } + FlushBuffer(true); // Does data block fit into buffer? if (nCount > m_nBufSize) @@ -1385,15 +1382,7 @@ sal_uInt64 SvStream::Seek(sal_uInt64 const nFilePos) } else { - if (m_isDirty && m_isConsistent) - { - SeekPos(m_nBufFilePos); - if (m_nCryptMask) - CryptAndWriteBuffer( m_pRWBuf, m_nBufActualLen ); - else - PutData( m_pRWBuf, m_nBufActualLen ); - m_isDirty = false; - } + FlushBuffer(m_isConsistent); m_nBufActualLen = 0; m_nBufActualPos = 0; m_pBufPos = m_pRWBuf; @@ -1416,31 +1405,14 @@ sal_uInt64 SvStream::remainingSize() void SvStream::Flush() { - if (m_isDirty && m_isConsistent) - { - SeekPos(m_nBufFilePos); - if (m_nCryptMask) - CryptAndWriteBuffer( m_pRWBuf, (std::size_t)m_nBufActualLen ); - else - if (PutData( m_pRWBuf, m_nBufActualLen ) != m_nBufActualLen) - SetError( SVSTREAM_WRITE_ERROR ); - m_isDirty = false; - } + FlushBuffer(m_isConsistent); if (m_isWritable) FlushData(); } void SvStream::RefreshBuffer() { - if (m_isDirty && m_isConsistent) - { - SeekPos(m_nBufFilePos); - if (m_nCryptMask) - CryptAndWriteBuffer( m_pRWBuf, (std::size_t)m_nBufActualLen ); - else - PutData( m_pRWBuf, m_nBufActualLen ); - m_isDirty = false; - } + FlushBuffer(m_isConsistent); SeekPos(m_nBufFilePos); m_nBufActualLen = (sal_uInt16)GetData( m_pRWBuf, m_nBufSize ); if (m_nBufActualLen && m_nError == ERRCODE_IO_PENDING) |