diff options
author | Thomas Arnhold <thomas@arnhold.org> | 2011-07-14 01:05:54 +0200 |
---|---|---|
committer | Thomas Arnhold <thomas@arnhold.org> | 2011-07-14 08:19:57 +0200 |
commit | 24d333676a54f48ed0c989fb54b42a9af899127f (patch) | |
tree | f565dee7a2efc7ad0a234190e3d96ccd61316f8f /unotools | |
parent | 03ce32c4feae1c4db4f307007ca19822eccc0a4f (diff) |
Revert "callcatcher: remove unused TempFile::SetTempNameBaseDirectory from unotools"
This reverts commit 817875a7126b403ab029ca1fa06c9d3297bd24b2.
Diffstat (limited to 'unotools')
-rw-r--r-- | unotools/inc/unotools/tempfile.hxx | 11 | ||||
-rw-r--r-- | unotools/source/ucbhelper/tempfile.cxx | 41 |
2 files changed, 52 insertions, 0 deletions
diff --git a/unotools/inc/unotools/tempfile.hxx b/unotools/inc/unotools/tempfile.hxx index b30f2eb4f7bd..2030b1ab0791 100644 --- a/unotools/inc/unotools/tempfile.hxx +++ b/unotools/inc/unotools/tempfile.hxx @@ -143,6 +143,17 @@ public: conversion functions of osl. */ static String CreateTempName( const String* pParent=NULL ); + + /** + The TempNameBaseDirectory is a subfolder in the folder that is passed as a "physical" file name in the + SetTempNameBaseDirectory method. + This subfolder will be used if a TempFile or TempName is created without a parent name or a parent name + that does not belong to the local file system. + The caller of the SetTempNameBase is responsible for deleting this folder and all temporary files in it. + The return value of both methods is the complete "physical" name of the tempname base folder. + It is not a URL because alle URLs must be "UCB compatible", so there may be no suitable URL at all. + */ + static String SetTempNameBaseDirectory( const String &rBaseName ); }; } diff --git a/unotools/source/ucbhelper/tempfile.cxx b/unotools/source/ucbhelper/tempfile.cxx index 49d8bfaf4efd..33a3ca6fb8f4 100644 --- a/unotools/source/ucbhelper/tempfile.cxx +++ b/unotools/source/ucbhelper/tempfile.cxx @@ -443,6 +443,47 @@ void TempFile::CloseStream() } } +String TempFile::SetTempNameBaseDirectory( const String &rBaseName ) +{ + if( !rBaseName.Len() ) + return String(); + + rtl::OUString aUnqPath( rBaseName ); + + // remove trailing slash + if ( rBaseName.GetChar( rBaseName.Len() - 1 ) == sal_Unicode( '/' ) ) + aUnqPath = rBaseName.Copy( 0, rBaseName.Len() - 1 ); + + // try to create the directory + sal_Bool bRet = sal_False; + osl::FileBase::RC err = osl::Directory::create( aUnqPath ); + if ( err != FileBase::E_None && err != FileBase::E_EXIST ) + // perhaps parent(s) don't exist + bRet = ensuredir( aUnqPath ); + else + bRet = sal_True; + + // failure to create base directory means returning an empty string + rtl::OUString aTmp; + if ( bRet ) + { + // append own internal directory + bRet = sal_True; + ::rtl::OUString &rTempNameBase_Impl = TempNameBase_Impl::get(); + rTempNameBase_Impl = rBaseName; + rTempNameBase_Impl += String( '/' ); + + TempFile aBase( NULL, sal_True ); + if ( aBase.IsValid() ) + // use it in case of success + rTempNameBase_Impl = aBase.pImp->aName; + + // return system path of used directory + FileBase::getSystemPathFromFileURL( rTempNameBase_Impl, aTmp ); + } + + return aTmp; +} } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |