From b8c8b0d0c2bb2a1ce61e4d94d0a3e0636db658fa Mon Sep 17 00:00:00 2001 From: Mark Page Date: Tue, 5 Jul 2016 14:33:20 +0100 Subject: Modify ImpGraphic class, GraphicReader context to use unique ptr Change-Id: I51c3995f4a6e940a5235524eb94dd356b27ae8d7 Reviewed-on: https://gerrit.libreoffice.org/26955 Tested-by: Jenkins Reviewed-by: Noel Grandin --- vcl/source/filter/ixbm/xbmread.cxx | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) (limited to 'vcl/source/filter/ixbm') 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( rGraphic.GetContext() ); - ReadState eReadState; - bool bRet = true; + std::shared_ptr pContext = rGraphic.GetContext(); + rGraphic.SetContext(nullptr); + XBMReader* pXBMReader = dynamic_cast( pContext.get() ); + if (!pXBMReader) + { + pContext = std::make_shared( rStm ); + pXBMReader = static_cast( 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; } -- cgit v1.2.3