summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2017-03-13 16:30:52 +0000
committerCaolán McNamara <caolanm@redhat.com>2017-03-13 20:19:10 +0000
commitee555c835aac8e21f0a08e7c9d513182728a4cfe (patch)
treee34598de24df6c08b4ae7f1737891e329d0c64ae /tools
parentbefafd4f8d58f81ac9cb0e4ef8dfbda9373787f7 (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.cxx66
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)