From a699927c563b6448014e6e96c71d0eb9714136d7 Mon Sep 17 00:00:00 2001 From: Stephan Bergmann Date: Tue, 13 May 2014 18:17:54 +0200 Subject: Elide utl::TempFile_Impl Change-Id: I8f14cd351c17abaa9d48144cdf8325afc250787b --- desktop/source/deployment/registry/dp_backend.cxx | 2 +- include/unotools/tempfile.hxx | 11 +-- unotools/source/ucbhelper/tempfile.cxx | 85 +++++++++-------------- 3 files changed, 40 insertions(+), 58 deletions(-) diff --git a/desktop/source/deployment/registry/dp_backend.cxx b/desktop/source/deployment/registry/dp_backend.cxx index d437a4664fba..076e4dd6bf71 100644 --- a/desktop/source/deployment/registry/dp_backend.cxx +++ b/desktop/source/deployment/registry/dp_backend.cxx @@ -221,7 +221,7 @@ OUString PackageRegistryBackend::createFolder( ::dp_misc::create_folder(&dataContent, sDataFolder, xCmdEnv); const OUString baseDir(sDataFolder); - const ::utl::TempFile aTemp(&baseDir, true); + ::utl::TempFile aTemp(&baseDir, true); const OUString url = aTemp.GetURL(); return sDataFolder + url.copy(url.lastIndexOf('/')); } diff --git a/include/unotools/tempfile.hxx b/include/unotools/tempfile.hxx index 659cdc7919b5..3299e581b016 100644 --- a/include/unotools/tempfile.hxx +++ b/include/unotools/tempfile.hxx @@ -26,8 +26,6 @@ namespace utl { -struct TempFile_Impl; - /** The class TempFile gives access to temporary files in the local file system. Sometimes they are needed because a 3rd party code has a file name based interface, or some file access has to be done locally without transferring tons of bytes to or @@ -46,8 +44,11 @@ struct TempFile_Impl; class UNOTOOLS_DLLPUBLIC TempFile { - TempFile_Impl* pImp; - bool bKillingFileEnabled; + OUString aName; + OUString aURL; + SvStream* pStream; + bool bIsDirectory; + bool bKillingFileEnabled; // prevent copy c'tor TempFile( const TempFile& ); @@ -99,7 +100,7 @@ public: If no UCP is available for the local file system, an empty URL is returned. In this case you can't access the file as a UCB content ! */ - OUString GetURL() const; + OUString GetURL(); /** Returns the "physical" name of the tempfile in host notation ( should only be used for 3rd party code diff --git a/unotools/source/ucbhelper/tempfile.cxx b/unotools/source/ucbhelper/tempfile.cxx index be2b8a15fc6a..b0b6b3eef7a4 100644 --- a/unotools/source/ucbhelper/tempfile.cxx +++ b/unotools/source/ucbhelper/tempfile.cxx @@ -47,20 +47,6 @@ namespace namespace utl { -struct TempFile_Impl -{ - OUString aName; - OUString aURL; - SvStream* pStream; - bool bIsDirectory; - - TempFile_Impl() - : pStream(0) - , bIsDirectory(false) - { - } -}; - OUString getParentName( const OUString& aFileName ) { sal_Int32 lastIndex = aFileName.lastIndexOf( '/' ); @@ -249,11 +235,9 @@ void CreateTempName_Impl( OUString& rName, bool bKeep, bool bDir = true ) } } -void lcl_createName(TempFile_Impl& _rImpl,const OUString& rLeadingChars, bool _bStartWithZero, +OUString lcl_createName(const OUString& rLeadingChars, bool _bStartWithZero, const OUString* pExtension, const OUString* pParent, bool bDirectory) { - _rImpl.bIsDirectory = bDirectory; - // get correct directory OUString aName = ConstructTempDir_Impl( pParent ); @@ -275,12 +259,11 @@ void lcl_createName(TempFile_Impl& _rImpl,const OUString& rLeadingChars, bool _b FileBase::RC err = Directory::create( aTmp ); if ( err == FileBase::E_None ) { - _rImpl.aName = aTmp; - break; + return aTmp; } else if ( err != FileBase::E_EXIST ) // if f.e. name contains invalid chars stop trying to create dirs - break; + return OUString(); } else { @@ -295,9 +278,8 @@ void lcl_createName(TempFile_Impl& _rImpl,const OUString& rLeadingChars, bool _b #endif if ( err == FileBase::E_None || err == FileBase::E_NOLCK ) { - _rImpl.aName = aTmp; aFile.close(); - break; + return aTmp; } else if ( err != FileBase::E_EXIST ) { @@ -309,7 +291,7 @@ void lcl_createName(TempFile_Impl& _rImpl,const OUString& rLeadingChars, bool _b if ( DirectoryItem::get( aTmp, aTmpItem ) != FileBase::E_None || aTmpItem.getFileStatus( aTmpStatus ) != FileBase::E_None || aTmpStatus.getFileType() != FileStatus::Directory ) - break; + return OUString(); } } if ( !_bStartWithZero ) @@ -333,93 +315,92 @@ OUString TempFile::CreateTempName() } TempFile::TempFile( const OUString* pParent, bool bDirectory ) - : pImp( new TempFile_Impl ) + : pStream( 0 ) + , bIsDirectory( bDirectory ) , bKillingFileEnabled( false ) { - pImp->bIsDirectory = bDirectory; - // get correct directory - pImp->aName = ConstructTempDir_Impl( pParent ); + aName = ConstructTempDir_Impl( pParent ); // get TempFile with default naming scheme - CreateTempName_Impl( pImp->aName, true, bDirectory ); + CreateTempName_Impl( aName, true, bDirectory ); } TempFile::TempFile( const OUString& rLeadingChars, const OUString* pExtension, const OUString* pParent, bool bDirectory) - : pImp( new TempFile_Impl ) + : pStream( 0 ) + , bIsDirectory( bDirectory ) , bKillingFileEnabled( false ) { - lcl_createName(*pImp, rLeadingChars, true, pExtension, pParent, bDirectory); + aName = lcl_createName(rLeadingChars, true, pExtension, pParent, bDirectory); } TempFile::TempFile( const OUString& rLeadingChars, bool _bStartWithZero, const OUString* pExtension, const OUString* pParent, bool bDirectory) - : pImp( new TempFile_Impl ) + : pStream( 0 ) + , bIsDirectory( bDirectory ) , bKillingFileEnabled( false ) { - lcl_createName(*pImp, rLeadingChars, _bStartWithZero, pExtension, pParent, bDirectory); + aName = lcl_createName(rLeadingChars, _bStartWithZero, pExtension, pParent, bDirectory); } TempFile::~TempFile() { - delete pImp->pStream; + delete pStream; if ( bKillingFileEnabled ) { - if ( pImp->bIsDirectory ) + if ( bIsDirectory ) { // at the moment no recursiv algorithm present - Directory::remove( pImp->aName ); + Directory::remove( aName ); } else { - File::remove( pImp->aName ); + File::remove( aName ); } } - - delete pImp; } bool TempFile::IsValid() const { - return !(pImp->aName.isEmpty()); + return !aName.isEmpty(); } OUString TempFile::GetFileName() const { OUString aTmp; - FileBase::getSystemPathFromFileURL( pImp->aName, aTmp ); + FileBase::getSystemPathFromFileURL( aName, aTmp ); return aTmp; } -OUString TempFile::GetURL() const +OUString TempFile::GetURL() { - if ( pImp->aURL.isEmpty() ) + if ( aURL.isEmpty() ) { OUString aTmp; LocalFileHelper::ConvertPhysicalNameToURL( GetFileName(), aTmp ); - pImp->aURL = aTmp; + aURL = aTmp; } - return pImp->aURL; + return aURL; } SvStream* TempFile::GetStream( StreamMode eMode ) { - if ( !pImp->pStream ) + if ( !pStream ) { if ( !GetURL().isEmpty() ) - pImp->pStream = UcbStreamHelper::CreateStream( pImp->aURL, eMode, true /* bFileExists */ ); + pStream = UcbStreamHelper::CreateStream( aURL, eMode, true /* bFileExists */ ); else - pImp->pStream = new SvMemoryStream( eMode ); + pStream = new SvMemoryStream( eMode ); } - return pImp->pStream; + return pStream; } void TempFile::CloseStream() { - if ( pImp->pStream ) + if ( pStream ) { - delete pImp->pStream; - pImp->pStream = NULL; + delete pStream; + pStream = NULL; } } @@ -456,7 +437,7 @@ OUString TempFile::SetTempNameBaseDirectory( const OUString &rBaseName ) TempFile aBase( NULL, true ); if ( aBase.IsValid() ) // use it in case of success - rTempNameBase_Impl = aBase.pImp->aName; + rTempNameBase_Impl = aBase.aName; // return system path of used directory FileBase::getSystemPathFromFileURL( rTempNameBase_Impl, aTmp ); -- cgit v1.2.3