summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--comphelper/inc/comphelper/storagehelper.hxx31
-rw-r--r--comphelper/source/misc/storagehelper.cxx21
-rw-r--r--svx/source/xml/xmlxtimp.cxx2
3 files changed, 30 insertions, 24 deletions
diff --git a/comphelper/inc/comphelper/storagehelper.hxx b/comphelper/inc/comphelper/storagehelper.hxx
index c0aa735c8390..36ff7957f4bc 100644
--- a/comphelper/inc/comphelper/storagehelper.hxx
+++ b/comphelper/inc/comphelper/storagehelper.hxx
@@ -25,8 +25,10 @@
* for a copy of the LGPLv3 License.
*
************************************************************************/
-#ifndef _COMPHELPER_STORAGEHELPER_HXX
-#define _COMPHELPER_STORAGEHELPER_HXX
+#ifndef COMPHELPER_STORAGEHELPER_HXX
+#define COMPHELPER_STORAGEHELPER_HXX
+
+#include <boost/scoped_ptr.hpp>
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/uno/Reference.hxx>
@@ -51,6 +53,20 @@
namespace comphelper {
+// Unfortunately - the impl.s of XStorage like to invalidate all
+// their sub streams and storages when you release references, so
+// it is necessary to keep references to all storages down the
+// path - this is 'beautiful' (TM). So we need this ugly hack:
+class COMPHELPER_DLLPUBLIC LifecycleProxy
+{
+private:
+ class Impl;
+public:
+ ::boost::scoped_ptr<Impl> m_pBadness;
+ LifecycleProxy();
+ ~LifecycleProxy();
+};
+
class COMPHELPER_DLLPUBLIC OStorageHelper
{
public:
@@ -170,17 +186,6 @@ public:
// Methods to allow easy use of hierachical names inside storages
- // Unfortunately - the impl.s of XStorage like to invalidate all
- // their sub streams and storages when you release references, so
- // it is necessary to keep references to all storages down the
- // path - this is 'beautiful' (TM). So we need this ugly hack:
- class LifecycleProxyImpl;
- class COMPHELPER_DLLPUBLIC LifecycleProxy {
- public:
- LifecycleProxyImpl *pBadness;
- LifecycleProxy();
- ~LifecycleProxy();
- };
static ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > GetStorageAtPath(
const ::com::sun::star::uno::Reference< ::com::sun::star::embed::XStorage > &xStorage,
const ::rtl::OUString& aPath, sal_uInt32 nOpenMode, LifecycleProxy &rNastiness );
diff --git a/comphelper/source/misc/storagehelper.cxx b/comphelper/source/misc/storagehelper.cxx
index 6fb41c9cedb9..e429f2223069 100644
--- a/comphelper/source/misc/storagehelper.cxx
+++ b/comphelper/source/misc/storagehelper.cxx
@@ -545,10 +545,11 @@ sal_Bool OStorageHelper::PathHasSegment( const ::rtl::OUString& aPath, const ::r
return bResult;
}
-class OStorageHelper::LifecycleProxyImpl : public std::vector< uno::Reference< embed::XStorage > > {};
-OStorageHelper::LifecycleProxy::LifecycleProxy() :
- pBadness( new OStorageHelper::LifecycleProxyImpl() ) { }
-OStorageHelper::LifecycleProxy::~LifecycleProxy() { delete pBadness; }
+class LifecycleProxy::Impl
+ : public std::vector< uno::Reference< embed::XStorage > > {};
+LifecycleProxy::LifecycleProxy()
+ : m_pBadness( new Impl() ) { }
+LifecycleProxy::~LifecycleProxy() { }
static void splitPath( std::vector<rtl::OUString> &rElems,
const ::rtl::OUString& rPath )
@@ -560,14 +561,14 @@ static void splitPath( std::vector<rtl::OUString> &rElems,
static uno::Reference< embed::XStorage > LookupStorageAtPath(
const uno::Reference< embed::XStorage > &xParentStorage,
std::vector<rtl::OUString> &rElems, sal_uInt32 nOpenMode,
- OStorageHelper::LifecycleProxy &rNastiness )
+ LifecycleProxy &rNastiness )
{
uno::Reference< embed::XStorage > xStorage( xParentStorage );
- rNastiness.pBadness->push_back( xStorage );
+ rNastiness.m_pBadness->push_back( xStorage );
for( size_t i = 0; i < rElems.size() && xStorage.is(); i++ )
{
xStorage = xStorage->openStorageElement( rElems[i], nOpenMode );
- rNastiness.pBadness->push_back( xStorage );
+ rNastiness.m_pBadness->push_back( xStorage );
}
return xStorage;
}
@@ -575,7 +576,7 @@ static uno::Reference< embed::XStorage > LookupStorageAtPath(
uno::Reference< embed::XStorage > OStorageHelper::GetStorageAtPath(
const uno::Reference< embed::XStorage > &xStorage,
const ::rtl::OUString& rPath, sal_uInt32 nOpenMode,
- OStorageHelper::LifecycleProxy &rNastiness )
+ LifecycleProxy &rNastiness )
{
std::vector<rtl::OUString> aElems;
splitPath( aElems, rPath );
@@ -585,7 +586,7 @@ uno::Reference< embed::XStorage > OStorageHelper::GetStorageAtPath(
uno::Reference< io::XStream > OStorageHelper::GetStreamAtPath(
const uno::Reference< embed::XStorage > &xParentStorage,
const ::rtl::OUString& rPath, sal_uInt32 nOpenMode,
- OStorageHelper::LifecycleProxy &rNastiness )
+ LifecycleProxy &rNastiness )
{
std::vector<rtl::OUString> aElems;
splitPath( aElems, rPath );
@@ -601,7 +602,7 @@ uno::Reference< io::XStream > OStorageHelper::GetStreamAtPath(
uno::Reference< io::XStream > OStorageHelper::GetStreamAtPackageURL(
uno::Reference< embed::XStorage > const& xParentStorage,
const ::rtl::OUString& rURL, sal_uInt32 const nOpenMode,
- OStorageHelper::LifecycleProxy & rNastiness)
+ LifecycleProxy & rNastiness)
{
static char const s_PkgScheme[] = "vnd.sun.star.Package:";
if (0 == rtl_ustr_ascii_shortenedCompareIgnoreAsciiCase_WithLength(
diff --git a/svx/source/xml/xmlxtimp.cxx b/svx/source/xml/xmlxtimp.cxx
index 604c6fb7d82c..50106c15fcbe 100644
--- a/svx/source/xml/xmlxtimp.cxx
+++ b/svx/source/xml/xmlxtimp.cxx
@@ -403,7 +403,7 @@ bool SvxXMLXTableImport::load( const rtl::OUString &rPath,
uno::Reference< xml::sax::XParser > xParser( xServiceFactory->createInstance( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.xml.sax.Parser" ) ) ), uno::UNO_QUERY_THROW );
xml::sax::InputSource aParserInput;
- comphelper::OStorageHelper::LifecycleProxy aNasty;
+ comphelper::LifecycleProxy aNasty;
if( !bUseStorage || !xStorage.is() )
{