vcl/source/gdi/dibtools.cxx | 63 ++++++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 34 deletions(-)
New commits: commit b67d9a5db61de3cef2dac072c55bf1dac9a2dc4c Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Wed Oct 10 16:48:06 2018 +0100 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Wed Oct 10 21:22:39 2018 +0200 can use remainingSize instead of Seek(STREAM_SEEK_TO_END) Change-Id: I6bbd9300fd3ec468267af2cf5d7f87d96d1817bc Reviewed-on: https://gerrit.libreoffice.org/61627 Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/vcl/source/gdi/dibtools.cxx b/vcl/source/gdi/dibtools.cxx index 1b4c13458ea6..accae76a3726 100644 --- a/vcl/source/gdi/dibtools.cxx +++ b/vcl/source/gdi/dibtools.cxx @@ -552,20 +552,17 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r if (rHeader.nSizeImage > rIStm.remainingSize()) return false; - std::unique_ptr<sal_uInt8[]> pBuffer(new sal_uInt8[rHeader.nSizeImage]); - if (rIStm.ReadBytes(pBuffer.get(), rHeader.nSizeImage) - != rHeader.nSizeImage) - { + std::vector<sal_uInt8> aBuffer(rHeader.nSizeImage); + if (rIStm.ReadBytes(aBuffer.data(), rHeader.nSizeImage) != rHeader.nSizeImage) return false; - } - if (!ImplDecodeRLE(pBuffer.get(), rHeader, rAcc, rPalette, bForceToMonoWhileReading, RLE_4 == rHeader.nCompression)) + if (!ImplDecodeRLE(aBuffer.data(), rHeader, rAcc, rPalette, bForceToMonoWhileReading, RLE_4 == rHeader.nCompression)) return false; } else { const long nWidth(rHeader.nWidth); const long nHeight(rHeader.nHeight); - std::unique_ptr<sal_uInt8[]> pBuf(new sal_uInt8[nAlignedWidth]); + std::vector<sal_uInt8> aBuf(nAlignedWidth); const long nI(bTopDown ? 1 : -1); long nY(bTopDown ? 0 : nHeight - 1); @@ -577,7 +574,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r { for( ; nCount--; nY += nI ) { - sal_uInt8 * pTmp = pBuf.get(); + sal_uInt8 * pTmp = aBuf.data(); if (rIStm.ReadBytes(pTmp, nAlignedWidth) != nAlignedWidth) { @@ -604,7 +601,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r { for( ; nCount--; nY += nI ) { - sal_uInt8 * pTmp = pBuf.get(); + sal_uInt8 * pTmp = aBuf.data(); if (rIStm.ReadBytes(pTmp, nAlignedWidth) != nAlignedWidth) { @@ -631,7 +628,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r { for( ; nCount--; nY += nI ) { - sal_uInt8 * pTmp = pBuf.get(); + sal_uInt8 * pTmp = aBuf.data(); if (rIStm.ReadBytes(pTmp, nAlignedWidth) != nAlignedWidth) { @@ -665,7 +662,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r for( ; nCount--; nY += nI ) { - sal_uInt16 * pTmp16 = reinterpret_cast<sal_uInt16*>(pBuf.get()); + sal_uInt16 * pTmp16 = reinterpret_cast<sal_uInt16*>(aBuf.data()); if (rIStm.ReadBytes(pTmp16, nAlignedWidth) != nAlignedWidth) { @@ -688,7 +685,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r for( ; nCount--; nY += nI ) { - sal_uInt8* pTmp = pBuf.get(); + sal_uInt8* pTmp = aBuf.data(); if (rIStm.ReadBytes(pTmp, nAlignedWidth) != nAlignedWidth) { @@ -729,7 +726,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r for( ; nCount--; nY += nI ) { - pTmp32 = reinterpret_cast<sal_uInt32*>(pBuf.get()); + pTmp32 = reinterpret_cast<sal_uInt32*>(aBuf.data()); if (rIStm.ReadBytes(pTmp32, nAlignedWidth) != nAlignedWidth) { @@ -751,7 +748,7 @@ bool ImplReadDIBBits(SvStream& rIStm, DIBV5Header& rHeader, BitmapWriteAccess& r { for( ; nCount--; nY += nI ) { - pTmp32 = reinterpret_cast<sal_uInt32*>(pBuf.get()); + pTmp32 = reinterpret_cast<sal_uInt32*>(aBuf.data()); if (rIStm.ReadBytes(pTmp32, nAlignedWidth) != nAlignedWidth) { @@ -1049,9 +1046,7 @@ bool ImplReadDIBFileHeader( SvStream& rIStm, sal_uLong& rOffset ) { bool bRet = false; - const sal_uInt64 nSavedStreamPos( rIStm.Tell() ); - const sal_uInt64 nStreamLength( rIStm.Seek( STREAM_SEEK_TO_END ) ); - rIStm.Seek( nSavedStreamPos ); + const sal_uInt64 nStreamLength = rIStm.remainingSize(); sal_uInt16 nTmp16 = 0; rIStm.ReadUInt16( nTmp16 ); @@ -1121,14 +1116,14 @@ bool ImplWriteRLE( SvStream& rOStm, BitmapReadAccess const & rAcc, bool bRLE4 ) sal_uLong nSaveIndex; sal_uLong nCount; sal_uLong nBufCount; - std::unique_ptr<sal_uInt8[]> pBuf(new sal_uInt8[ ( nWidth << 1 ) + 2 ]); + std::vector<sal_uInt8> aBuf(( nWidth << 1 ) + 2); sal_uInt8 cPix; sal_uInt8 cLast; bool bFound; for ( long nY = nHeight - 1; nY >= 0; nY-- ) { - sal_uInt8* pTmp = pBuf.get(); + sal_uInt8* pTmp = aBuf.data(); nX = nBufCount = 0; Scanline pScanline = rAcc.GetScanline( nY ); @@ -1215,10 +1210,10 @@ bool ImplWriteRLE( SvStream& rOStm, BitmapReadAccess const & rAcc, bool bRLE4 ) } } - pBuf[ nBufCount++ ] = 0; - pBuf[ nBufCount++ ] = 0; + aBuf[ nBufCount++ ] = 0; + aBuf[ nBufCount++ ] = 0; - rOStm.WriteBytes( pBuf.get(), nBufCount ); + rOStm.WriteBytes(aBuf.data(), nBufCount); } rOStm.WriteUChar( 0 ); @@ -1303,18 +1298,18 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead { const long nWidth(rAcc.Width()); const long nHeight(rAcc.Height()); - std::unique_ptr<sal_uInt8[]> pBuf(new sal_uInt8[ nAlignedWidth ]); + std::vector<sal_uInt8> aBuf(nAlignedWidth); switch( nBitCount ) { case 1: { //valgrind, zero out the trailing unused alignment bytes size_t nUnusedBytes = nAlignedWidth - ((nWidth+7) / 8); - memset(pBuf.get() + nAlignedWidth - nUnusedBytes, 0, nUnusedBytes); + memset(aBuf.data() + nAlignedWidth - nUnusedBytes, 0, nUnusedBytes); for( long nY = nHeight - 1; nY >= 0; nY-- ) { - sal_uInt8* pTmp = pBuf.get(); + sal_uInt8* pTmp = aBuf.data(); sal_uInt8 cTmp = 0; Scanline pScanline = rAcc.GetScanline( nY ); @@ -1331,7 +1326,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead } *pTmp = cTmp; - rOStm.WriteBytes( pBuf.get(), nAlignedWidth ); + rOStm.WriteBytes(aBuf.data(), nAlignedWidth); } } break; @@ -1340,11 +1335,11 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead { //valgrind, zero out the trailing unused alignment bytes size_t nUnusedBytes = nAlignedWidth - ((nWidth+1) / 2); - memset(pBuf.get() + nAlignedWidth - nUnusedBytes, 0, nUnusedBytes); + memset(aBuf.data() + nAlignedWidth - nUnusedBytes, 0, nUnusedBytes); for( long nY = nHeight - 1; nY >= 0; nY-- ) { - sal_uInt8* pTmp = pBuf.get(); + sal_uInt8* pTmp = aBuf.data(); sal_uInt8 cTmp = 0; Scanline pScanline = rAcc.GetScanline( nY ); @@ -1360,7 +1355,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead cTmp |= rAcc.GetIndexFromData( pScanline, nX ) << ( --nShift << 2 ); } *pTmp = cTmp; - rOStm.WriteBytes( pBuf.get(), nAlignedWidth ); + rOStm.WriteBytes(aBuf.data(), nAlignedWidth); } } break; @@ -1369,13 +1364,13 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead { for( long nY = nHeight - 1; nY >= 0; nY-- ) { - sal_uInt8* pTmp = pBuf.get(); + sal_uInt8* pTmp = aBuf.data(); Scanline pScanline = rAcc.GetScanline( nY ); for( long nX = 0; nX < nWidth; nX++ ) *pTmp++ = rAcc.GetIndexFromData( pScanline, nX ); - rOStm.WriteBytes( pBuf.get(), nAlignedWidth ); + rOStm.WriteBytes(aBuf.data(), nAlignedWidth); } } break; @@ -1384,7 +1379,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead { //valgrind, zero out the trailing unused alignment bytes size_t nUnusedBytes = nAlignedWidth - nWidth * 3; - memset(pBuf.get() + nAlignedWidth - nUnusedBytes, 0, nUnusedBytes); + memset(aBuf.data() + nAlignedWidth - nUnusedBytes, 0, nUnusedBytes); } SAL_FALLTHROUGH; // #i59239# fallback to 24 bit format, if bitcount is non-default @@ -1395,7 +1390,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead for( long nY = nHeight - 1; nY >= 0; nY-- ) { - sal_uInt8* pTmp = pBuf.get(); + sal_uInt8* pTmp = aBuf.data(); Scanline pScanlineAlpha = bWriteAlpha ? pAccAlpha->GetScanline( nY ) : nullptr; for( long nX = 0; nX < nWidth; nX++ ) @@ -1414,7 +1409,7 @@ bool ImplWriteDIBBits(SvStream& rOStm, BitmapReadAccess const & rAcc, BitmapRead } } - rOStm.WriteBytes( pBuf.get(), nAlignedWidth ); + rOStm.WriteBytes(aBuf.data(), nAlignedWidth); } } break; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits