summaryrefslogtreecommitdiff
path: root/vcl/source/filter/ixbm
diff options
context:
space:
mode:
authorMark Page <aptitude@btconnect.com>2016-07-05 14:33:20 +0100
committerNoel Grandin <noelgrandin@gmail.com>2016-07-11 06:32:00 +0000
commitb8c8b0d0c2bb2a1ce61e4d94d0a3e0636db658fa (patch)
tree922591d03f342f5585e935cd54edae14f533d252 /vcl/source/filter/ixbm
parenta4d40892b78070c9e54e0c8a30ed20d3395e68cd (diff)
Modify ImpGraphic class, GraphicReader context to use unique ptr
Change-Id: I51c3995f4a6e940a5235524eb94dd356b27ae8d7 Reviewed-on: https://gerrit.libreoffice.org/26955 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noelgrandin@gmail.com>
Diffstat (limited to 'vcl/source/filter/ixbm')
-rw-r--r--vcl/source/filter/ixbm/xbmread.cxx24
1 files changed, 12 insertions, 12 deletions
diff --git a/vcl/source/filter/ixbm/xbmread.cxx b/vcl/source/filter/ixbm/xbmread.cxx
index a8a59a741891..4053f056d53e 100644
--- a/vcl/source/filter/ixbm/xbmread.cxx
+++ b/vcl/source/filter/ixbm/xbmread.cxx
@@ -381,25 +381,25 @@ ReadState XBMReader::ReadXBM( Graphic& rGraphic )
VCL_DLLPUBLIC bool ImportXBM( SvStream& rStm, Graphic& rGraphic )
{
- XBMReader* pXBMReader = static_cast<XBMReader*>( rGraphic.GetContext() );
- ReadState eReadState;
- bool bRet = true;
+ std::shared_ptr<GraphicReader> pContext = rGraphic.GetContext();
+ rGraphic.SetContext(nullptr);
+ XBMReader* pXBMReader = dynamic_cast<XBMReader*>( pContext.get() );
+ if (!pXBMReader)
+ {
+ pContext = std::make_shared<XBMReader>( rStm );
+ pXBMReader = static_cast<XBMReader*>( pContext.get() );
+ }
- if( !pXBMReader )
- pXBMReader = new XBMReader( rStm );
+ bool bRet = true;
- rGraphic.SetContext( nullptr );
- eReadState = pXBMReader->ReadXBM( rGraphic );
+ ReadState eReadState = pXBMReader->ReadXBM( rGraphic );
if( eReadState == XBMREAD_ERROR )
{
bRet = false;
- delete pXBMReader;
}
- else if( eReadState == XBMREAD_OK )
- delete pXBMReader;
- else
- rGraphic.SetContext( pXBMReader );
+ else if( eReadState == XBMREAD_NEED_MORE )
+ rGraphic.SetContext( pContext );
return bRet;
}