Kaydet (Commit) a699927c authored tarafından Stephan Bergmann's avatar Stephan Bergmann

Elide utl::TempFile_Impl

Change-Id: I8f14cd351c17abaa9d48144cdf8325afc250787b
üst 404e4d61
...@@ -221,7 +221,7 @@ OUString PackageRegistryBackend::createFolder( ...@@ -221,7 +221,7 @@ OUString PackageRegistryBackend::createFolder(
::dp_misc::create_folder(&dataContent, sDataFolder, xCmdEnv); ::dp_misc::create_folder(&dataContent, sDataFolder, xCmdEnv);
const OUString baseDir(sDataFolder); const OUString baseDir(sDataFolder);
const ::utl::TempFile aTemp(&baseDir, true); ::utl::TempFile aTemp(&baseDir, true);
const OUString url = aTemp.GetURL(); const OUString url = aTemp.GetURL();
return sDataFolder + url.copy(url.lastIndexOf('/')); return sDataFolder + url.copy(url.lastIndexOf('/'));
} }
......
...@@ -26,8 +26,6 @@ ...@@ -26,8 +26,6 @@
namespace utl 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 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 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; ...@@ -46,8 +44,11 @@ struct TempFile_Impl;
class UNOTOOLS_DLLPUBLIC TempFile class UNOTOOLS_DLLPUBLIC TempFile
{ {
TempFile_Impl* pImp; OUString aName;
bool bKillingFileEnabled; OUString aURL;
SvStream* pStream;
bool bIsDirectory;
bool bKillingFileEnabled;
// prevent copy c'tor // prevent copy c'tor
TempFile( const TempFile& ); TempFile( const TempFile& );
...@@ -99,7 +100,7 @@ public: ...@@ -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 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 ! 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 Returns the "physical" name of the tempfile in host notation ( should only be used for 3rd party code
......
...@@ -47,20 +47,6 @@ namespace ...@@ -47,20 +47,6 @@ namespace
namespace utl namespace utl
{ {
struct TempFile_Impl
{
OUString aName;
OUString aURL;
SvStream* pStream;
bool bIsDirectory;
TempFile_Impl()
: pStream(0)
, bIsDirectory(false)
{
}
};
OUString getParentName( const OUString& aFileName ) OUString getParentName( const OUString& aFileName )
{ {
sal_Int32 lastIndex = aFileName.lastIndexOf( '/' ); sal_Int32 lastIndex = aFileName.lastIndexOf( '/' );
...@@ -249,11 +235,9 @@ void CreateTempName_Impl( OUString& rName, bool bKeep, bool bDir = true ) ...@@ -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) const OUString* pExtension, const OUString* pParent, bool bDirectory)
{ {
_rImpl.bIsDirectory = bDirectory;
// get correct directory // get correct directory
OUString aName = ConstructTempDir_Impl( pParent ); OUString aName = ConstructTempDir_Impl( pParent );
...@@ -275,12 +259,11 @@ void lcl_createName(TempFile_Impl& _rImpl,const OUString& rLeadingChars, bool _b ...@@ -275,12 +259,11 @@ void lcl_createName(TempFile_Impl& _rImpl,const OUString& rLeadingChars, bool _b
FileBase::RC err = Directory::create( aTmp ); FileBase::RC err = Directory::create( aTmp );
if ( err == FileBase::E_None ) if ( err == FileBase::E_None )
{ {
_rImpl.aName = aTmp; return aTmp;
break;
} }
else if ( err != FileBase::E_EXIST ) else if ( err != FileBase::E_EXIST )
// if f.e. name contains invalid chars stop trying to create dirs // if f.e. name contains invalid chars stop trying to create dirs
break; return OUString();
} }
else else
{ {
...@@ -295,9 +278,8 @@ void lcl_createName(TempFile_Impl& _rImpl,const OUString& rLeadingChars, bool _b ...@@ -295,9 +278,8 @@ void lcl_createName(TempFile_Impl& _rImpl,const OUString& rLeadingChars, bool _b
#endif #endif
if ( err == FileBase::E_None || err == FileBase::E_NOLCK ) if ( err == FileBase::E_None || err == FileBase::E_NOLCK )
{ {
_rImpl.aName = aTmp;
aFile.close(); aFile.close();
break; return aTmp;
} }
else if ( err != FileBase::E_EXIST ) else if ( err != FileBase::E_EXIST )
{ {
...@@ -309,7 +291,7 @@ void lcl_createName(TempFile_Impl& _rImpl,const OUString& rLeadingChars, bool _b ...@@ -309,7 +291,7 @@ void lcl_createName(TempFile_Impl& _rImpl,const OUString& rLeadingChars, bool _b
if ( DirectoryItem::get( aTmp, aTmpItem ) != FileBase::E_None if ( DirectoryItem::get( aTmp, aTmpItem ) != FileBase::E_None
|| aTmpItem.getFileStatus( aTmpStatus ) != FileBase::E_None || aTmpItem.getFileStatus( aTmpStatus ) != FileBase::E_None
|| aTmpStatus.getFileType() != FileStatus::Directory ) || aTmpStatus.getFileType() != FileStatus::Directory )
break; return OUString();
} }
} }
if ( !_bStartWithZero ) if ( !_bStartWithZero )
...@@ -333,93 +315,92 @@ OUString TempFile::CreateTempName() ...@@ -333,93 +315,92 @@ OUString TempFile::CreateTempName()
} }
TempFile::TempFile( const OUString* pParent, bool bDirectory ) TempFile::TempFile( const OUString* pParent, bool bDirectory )
: pImp( new TempFile_Impl ) : pStream( 0 )
, bIsDirectory( bDirectory )
, bKillingFileEnabled( false ) , bKillingFileEnabled( false )
{ {
pImp->bIsDirectory = bDirectory;
// get correct directory // get correct directory
pImp->aName = ConstructTempDir_Impl( pParent ); aName = ConstructTempDir_Impl( pParent );
// get TempFile with default naming scheme // 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) TempFile::TempFile( const OUString& rLeadingChars, const OUString* pExtension, const OUString* pParent, bool bDirectory)
: pImp( new TempFile_Impl ) : pStream( 0 )
, bIsDirectory( bDirectory )
, bKillingFileEnabled( false ) , 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) 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 ) , bKillingFileEnabled( false )
{ {
lcl_createName(*pImp, rLeadingChars, _bStartWithZero, pExtension, pParent, bDirectory); aName = lcl_createName(rLeadingChars, _bStartWithZero, pExtension, pParent, bDirectory);
} }
TempFile::~TempFile() TempFile::~TempFile()
{ {
delete pImp->pStream; delete pStream;
if ( bKillingFileEnabled ) if ( bKillingFileEnabled )
{ {
if ( pImp->bIsDirectory ) if ( bIsDirectory )
{ {
// at the moment no recursiv algorithm present // at the moment no recursiv algorithm present
Directory::remove( pImp->aName ); Directory::remove( aName );
} }
else else
{ {
File::remove( pImp->aName ); File::remove( aName );
} }
} }
delete pImp;
} }
bool TempFile::IsValid() const bool TempFile::IsValid() const
{ {
return !(pImp->aName.isEmpty()); return !aName.isEmpty();
} }
OUString TempFile::GetFileName() const OUString TempFile::GetFileName() const
{ {
OUString aTmp; OUString aTmp;
FileBase::getSystemPathFromFileURL( pImp->aName, aTmp ); FileBase::getSystemPathFromFileURL( aName, aTmp );
return aTmp; return aTmp;
} }
OUString TempFile::GetURL() const OUString TempFile::GetURL()
{ {
if ( pImp->aURL.isEmpty() ) if ( aURL.isEmpty() )
{ {
OUString aTmp; OUString aTmp;
LocalFileHelper::ConvertPhysicalNameToURL( GetFileName(), aTmp ); LocalFileHelper::ConvertPhysicalNameToURL( GetFileName(), aTmp );
pImp->aURL = aTmp; aURL = aTmp;
} }
return pImp->aURL; return aURL;
} }
SvStream* TempFile::GetStream( StreamMode eMode ) SvStream* TempFile::GetStream( StreamMode eMode )
{ {
if ( !pImp->pStream ) if ( !pStream )
{ {
if ( !GetURL().isEmpty() ) if ( !GetURL().isEmpty() )
pImp->pStream = UcbStreamHelper::CreateStream( pImp->aURL, eMode, true /* bFileExists */ ); pStream = UcbStreamHelper::CreateStream( aURL, eMode, true /* bFileExists */ );
else else
pImp->pStream = new SvMemoryStream( eMode ); pStream = new SvMemoryStream( eMode );
} }
return pImp->pStream; return pStream;
} }
void TempFile::CloseStream() void TempFile::CloseStream()
{ {
if ( pImp->pStream ) if ( pStream )
{ {
delete pImp->pStream; delete pStream;
pImp->pStream = NULL; pStream = NULL;
} }
} }
...@@ -456,7 +437,7 @@ OUString TempFile::SetTempNameBaseDirectory( const OUString &rBaseName ) ...@@ -456,7 +437,7 @@ OUString TempFile::SetTempNameBaseDirectory( const OUString &rBaseName )
TempFile aBase( NULL, true ); TempFile aBase( NULL, true );
if ( aBase.IsValid() ) if ( aBase.IsValid() )
// use it in case of success // use it in case of success
rTempNameBase_Impl = aBase.pImp->aName; rTempNameBase_Impl = aBase.aName;
// return system path of used directory // return system path of used directory
FileBase::getSystemPathFromFileURL( rTempNameBase_Impl, aTmp ); FileBase::getSystemPathFromFileURL( rTempNameBase_Impl, aTmp );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment