summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--dbaccess/source/core/dataaccess/databasecontext.cxx16
-rw-r--r--sw/source/uibase/dbui/dbmgr.cxx9
2 files changed, 17 insertions, 8 deletions
diff --git a/dbaccess/source/core/dataaccess/databasecontext.cxx b/dbaccess/source/core/dataaccess/databasecontext.cxx
index 4e6c185e1943..2332ced91a30 100644
--- a/dbaccess/source/core/dataaccess/databasecontext.cxx
+++ b/dbaccess/source/core/dataaccess/databasecontext.cxx
@@ -315,9 +315,15 @@ Reference< XInterface > ODatabaseContext::loadObjectFromURL(const OUString& _rNa
OUString _sURL(rURL);
INetURLObject aURL( _sURL );
- OUString aMark = aURL.GetMark(INetURLObject::DECODE_WITH_CHARSET);
- if (!aMark.isEmpty())
- _sURL = aURL.GetURLNoMark();
+ OUString sStreamRelPath;
+ if (_sURL.startsWithIgnoreAsciiCase("vnd.sun.star.pkg:"))
+ {
+ // In this case the host contains the real path, and the the path is the embedded stream name.
+ _sURL = aURL.GetHost(INetURLObject::DECODE_WITH_CHARSET);
+ sStreamRelPath = aURL.GetURLPath(INetURLObject::DECODE_WITH_CHARSET);
+ if (sStreamRelPath.startsWith("/"))
+ sStreamRelPath = sStreamRelPath.copy(1);
+ }
if ( aURL.GetProtocol() == INetProtocol::NotValid )
throw NoSuchElementException( _rName, *this );
@@ -367,8 +373,8 @@ Reference< XInterface > ODatabaseContext::loadObjectFromURL(const OUString& _rNa
aArgs.put( "URL", _sURL );
aArgs.put( "MacroExecutionMode", MacroExecMode::USE_CONFIG );
aArgs.put( "InteractionHandler", task::InteractionHandler::createWithParent(m_aContext, 0) );
- if (!aMark.isEmpty())
- aArgs.put("StreamRelPath", aMark);
+ if (!sStreamRelPath.isEmpty())
+ aArgs.put("StreamRelPath", sStreamRelPath);
Sequence< PropertyValue > aResource( aArgs.getPropertyValues() );
xLoad->load( aResource );
diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx
index 042a0bd925a7..3f81f2edeadc 100644
--- a/sw/source/uibase/dbui/dbmgr.cxx
+++ b/sw/source/uibase/dbui/dbmgr.cxx
@@ -2631,9 +2631,12 @@ void SwDBManager::LoadAndRegisterEmbeddedDataSource(const SwDBData& rData, const
if (xDatabaseContext->hasByName(rData.sDataSource))
xDatabaseContext->revokeObject(rData.sDataSource);
- INetURLObject aURLObject(rDocShell.GetMedium()->GetURLObject());
- aURLObject.SetMark(rData.sEmbeddedName);
- OUString aURL = aURLObject.GetMainURL(INetURLObject::DECODE_WITH_CHARSET);
+ // Encode the stream name and the real path into a single URL.
+ const INetURLObject& rURLObject = rDocShell.GetMedium()->GetURLObject();
+ OUString aURL = "vnd.sun.star.pkg://";
+ aURL += INetURLObject::encode(rURLObject.GetMainURL(INetURLObject::DECODE_WITH_CHARSET), INetURLObject::PART_AUTHORITY, INetURLObject::ENCODE_ALL);
+ aURL += "/" + INetURLObject::encode(rData.sEmbeddedName, INetURLObject::PART_FPATH, INetURLObject::ENCODE_ALL);
+
uno::Reference<uno::XInterface> xDataSource(xDatabaseContext->getByName(aURL), uno::UNO_QUERY);
xDatabaseContext->registerObject(rData.sDataSource, xDataSource);
}