sc/source/filter/inc/xcl97esc.hxx   |    2 +-
 sc/source/filter/xcl97/xcl97esc.cxx |   11 ++++-------
 sc/source/ui/app/drwtrans.cxx       |   15 ++++++---------
 sc/source/ui/app/transobj.cxx       |   13 +++++--------
 4 files changed, 16 insertions(+), 25 deletions(-)

New commits:
commit 3e095961add3705b788b017ea63585937a9fd7d3
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Sun Sep 18 17:47:45 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Tue Sep 20 08:07:35 2022 +0200

    simplify usage of TempFile in sc
    
    TempFile already handles the stream. And not touching the URL
    means we stay on the fast path for temp files.
    
    Change-Id: Icab41d12ab7846b8901a92c11fee05952b98fafc
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/140201
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/sc/source/filter/inc/xcl97esc.hxx 
b/sc/source/filter/inc/xcl97esc.hxx
index 6ae5c8762d46..00012c8a95f0 100644
--- a/sc/source/filter/inc/xcl97esc.hxx
+++ b/sc/source/filter/inc/xcl97esc.hxx
@@ -38,7 +38,7 @@ private:
 
 private:
     ::std::unique_ptr< ::utl::TempFile > mxPicTempFile;
-    ::std::unique_ptr< SvStream > mxPicStrm;
+    SvStream* mpPicStrm;
 };
 
 class XclObj;
diff --git a/sc/source/filter/xcl97/xcl97esc.cxx 
b/sc/source/filter/xcl97/xcl97esc.cxx
index 1ecb0891dc20..168a3ba50897 100644
--- a/sc/source/filter/xcl97/xcl97esc.cxx
+++ b/sc/source/filter/xcl97/xcl97esc.cxx
@@ -75,13 +75,10 @@ XclEscherExGlobal::XclEscherExGlobal( const XclExpRoot& 
rRoot ) :
 SvStream* XclEscherExGlobal::ImplQueryPictureStream()
 {
     mxPicTempFile.reset( new ::utl::TempFile );
-    if( mxPicTempFile->IsValid() )
-    {
-        mxPicTempFile->EnableKillingFile();
-        mxPicStrm = ::utl::UcbStreamHelper::CreateStream( 
mxPicTempFile->GetURL(), StreamMode::STD_READWRITE );
-        mxPicStrm->SetEndian( SvStreamEndian::LITTLE );
-    }
-    return mxPicStrm.get();
+    mxPicTempFile->EnableKillingFile();
+    mpPicStrm = mxPicTempFile->GetStream( StreamMode::READWRITE );
+    mpPicStrm->SetEndian( SvStreamEndian::LITTLE );
+    return mpPicStrm;
 }
 
 XclEscherEx::XclEscherEx( const XclExpRoot& rRoot, XclExpObjectManager& 
rObjMgr, SvStream& rStrm, const XclEscherEx* pParent ) :
diff --git a/sc/source/ui/app/drwtrans.cxx b/sc/source/ui/app/drwtrans.cxx
index 5c4d5ef811dd..2548c28be687 100644
--- a/sc/source/ui/app/drwtrans.cxx
+++ b/sc/source/ui/app/drwtrans.cxx
@@ -472,8 +472,9 @@ bool ScDrawTransferObj::WriteObject( 
tools::SvRef<SotTempStream>& rxOStm, void*
 
                 ::utl::TempFile     aTempFile;
                 aTempFile.EnableKillingFile();
+                SvStream* pTempStream = 
aTempFile.GetStream(StreamMode::READWRITE);
                 uno::Reference< embed::XStorage > xWorkStore =
-                    ::comphelper::OStorageHelper::GetStorageFromURL( 
aTempFile.GetURL(), embed::ElementModes::READWRITE );
+                    ::comphelper::OStorageHelper::GetStorageFromStream( new 
utl::OStreamWrapper(*pTempStream) );
 
                 uno::Reference < embed::XEmbedPersist > xPers( 
static_cast<embed::XVisualObject*>(pEmbObj), uno::UNO_QUERY );
                 if ( xPers.is() )
@@ -516,8 +517,9 @@ bool ScDrawTransferObj::WriteObject( 
tools::SvRef<SotTempStream>& rxOStm, void*
                 {
                     ::utl::TempFile     aTempFile;
                     aTempFile.EnableKillingFile();
+                    SvStream* pTempStream = 
aTempFile.GetStream(StreamMode::READWRITE);
                     uno::Reference< embed::XStorage > xWorkStore =
-                        ::comphelper::OStorageHelper::GetStorageFromURL( 
aTempFile.GetURL(), embed::ElementModes::READWRITE );
+                        ::comphelper::OStorageHelper::GetStorageFromStream( 
new utl::OStreamWrapper(*pTempStream) );
 
                     // write document storage
                     pEmbObj->SetupStorage( xWorkStore, 
SOFFICE_FILEFORMAT_CURRENT, false );
@@ -531,13 +533,8 @@ bool ScDrawTransferObj::WriteObject( 
tools::SvRef<SotTempStream>& rxOStm, void*
                     if ( xTransact.is() )
                         xTransact->commit();
 
-                    std::unique_ptr<SvStream> pSrcStm = 
::utl::UcbStreamHelper::CreateStream( aTempFile.GetURL(), StreamMode::READ );
-                    if( pSrcStm )
-                    {
-                        rxOStm->SetBufferSize( 0xff00 );
-                        rxOStm->WriteStream( *pSrcStm );
-                        pSrcStm.reset();
-                    }
+                    rxOStm->SetBufferSize( 0xff00 );
+                    rxOStm->WriteStream( *pTempStream );
 
                     xWorkStore->dispose();
                     xWorkStore.clear();
diff --git a/sc/source/ui/app/transobj.cxx b/sc/source/ui/app/transobj.cxx
index 670ad23976d6..26a9ddc504de 100644
--- a/sc/source/ui/app/transobj.cxx
+++ b/sc/source/ui/app/transobj.cxx
@@ -27,6 +27,7 @@
 #include <osl/diagnose.h>
 #include <unotools/tempfile.hxx>
 #include <unotools/ucbstreamhelper.hxx>
+#include <unotools/streamwrap.hxx>
 #include <comphelper/fileformat.h>
 #include <comphelper/lok.hxx>
 #include <comphelper/storagehelper.hxx>
@@ -509,8 +510,9 @@ bool ScTransferObj::WriteObject( 
tools::SvRef<SotTempStream>& rxOStm, void* pUse
                 SfxObjectShell*   pEmbObj = 
static_cast<SfxObjectShell*>(pUserObject);
                 ::utl::TempFile     aTempFile;
                 aTempFile.EnableKillingFile();
+                SvStream* pTempStream = 
aTempFile.GetStream(StreamMode::READWRITE);
                 uno::Reference< embed::XStorage > xWorkStore =
-                    ::comphelper::OStorageHelper::GetStorageFromURL( 
aTempFile.GetURL(), embed::ElementModes::READWRITE );
+                    ::comphelper::OStorageHelper::GetStorageFromStream( new 
utl::OStreamWrapper(*pTempStream) );
 
                 // write document storage
                 pEmbObj->SetupStorage( xWorkStore, SOFFICE_FILEFORMAT_CURRENT, 
false );
@@ -524,13 +526,8 @@ bool ScTransferObj::WriteObject( 
tools::SvRef<SotTempStream>& rxOStm, void* pUse
                 if ( xTransact.is() )
                     xTransact->commit();
 
-                std::unique_ptr<SvStream> pSrcStm = 
::utl::UcbStreamHelper::CreateStream( aTempFile.GetURL(), StreamMode::READ );
-                if( pSrcStm )
-                {
-                    rxOStm->SetBufferSize( 0xff00 );
-                    rxOStm->WriteStream( *pSrcStm );
-                    pSrcStm.reset();
-                }
+                rxOStm->SetBufferSize( 0xff00 );
+                rxOStm->WriteStream( *pTempStream );
 
                 bRet = true;
 

Reply via email to