summaryrefslogtreecommitdiff
path: root/unotools
diff options
context:
space:
mode:
authorThomas Arnhold <thomas@arnhold.org>2011-07-14 01:05:54 +0200
committerThomas Arnhold <thomas@arnhold.org>2011-07-14 08:19:57 +0200
commit24d333676a54f48ed0c989fb54b42a9af899127f (patch)
treef565dee7a2efc7ad0a234190e3d96ccd61316f8f /unotools
parent03ce32c4feae1c4db4f307007ca19822eccc0a4f (diff)
Revert "callcatcher: remove unused TempFile::SetTempNameBaseDirectory from unotools"
This reverts commit 817875a7126b403ab029ca1fa06c9d3297bd24b2.
Diffstat (limited to 'unotools')
-rw-r--r--unotools/inc/unotools/tempfile.hxx11
-rw-r--r--unotools/source/ucbhelper/tempfile.cxx41
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: */