diff options
author | Michael Meeks <michael.meeks@collabora.com> | 2013-11-07 11:37:19 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2013-11-07 11:50:00 +0000 |
commit | 3c608eb38150f3b11919adf6eca6eff0fdfdb0cd (patch) | |
tree | 022a89f6776d0101bff063e92e47d922440fcc0a | |
parent | d324745fe95c7f0fad56f146e1e33f994a0d5de6 (diff) |
liblibo: share crude URL absolutization, and clean.
Change-Id: I559eac8626a011644f68f8391631447f15c643eb
-rw-r--r-- | desktop/source/lib/init.cxx | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 6c6b9f51ad27..d26d5b8752a0 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -135,24 +135,33 @@ static OUString getUString( const char *str ) RTL_TEXTENCODING_UTF8 ); } +// Try to convert a relative URL to an absolute one +static OUString getAbsoluteURL( const char *pURL ) +{ + OUString aURL( getUString( pURL ) ); + OUString sAbsoluteDocUrl, sWorkingDir, sDocPathUrl; + + // FIXME: this would appear to kill non-file URLs. + osl_getProcessWorkingDir(&sWorkingDir.pData); + osl::FileBase::getFileURLFromSystemPath( aURL, sDocPathUrl ); + osl::FileBase::getAbsoluteFileURL(sWorkingDir, sDocPathUrl, sAbsoluteDocUrl); + + return sAbsoluteDocUrl; +} + LODocument * LibLibreOffice_Impl::documentLoad( const char *docUrl ) { - OUString sUrl = getUString( docUrl ); - OUString sAbsoluteDocUrl, sWorkingDir, sDocPathUrl; + OUString aURL = getAbsoluteURL( docUrl ); uno::Reference < css::frame::XDesktop2 > xComponentLoader = css::frame::Desktop::create(xContext); - osl_getProcessWorkingDir(&sWorkingDir.pData); - osl::FileBase::getFileURLFromSystemPath( sUrl, sDocPathUrl ); - osl::FileBase::getAbsoluteFileURL(sWorkingDir, sDocPathUrl, sAbsoluteDocUrl); - maLastExceptionMsg = ""; try { uno::Reference < css::lang::XComponent > xComponent = xComponentLoader->loadComponentFromURL( - sAbsoluteDocUrl, OUString("_blank"), 0, + aURL, OUString("_blank"), 0, uno::Sequence < css::beans::PropertyValue >()); if( xComponentLoader.is() ) return new LibLODocument_Impl( xComponent ); @@ -168,12 +177,7 @@ bool LibLODocument_Impl::saveAs (const char *url, const char *format) { OUString sFormat = getUString( format ); - OUString sUrl = getUString( url ); - OUString sAbsoluteDocUrl, sWorkingDir, sDocPathUrl; - - osl_getProcessWorkingDir(&sWorkingDir.pData); - osl::FileBase::getFileURLFromSystemPath( sUrl, sDocPathUrl ); - osl::FileBase::getAbsoluteFileURL(sWorkingDir, sDocPathUrl, sAbsoluteDocUrl); + OUString aURL = getAbsoluteURL( url ); try { uno::Reference< frame::XModel > xDocument( mxComponent, uno::UNO_QUERY_THROW ); @@ -205,10 +209,10 @@ bool LibLODocument_Impl::saveAs (const char *url, const char *format) if( ! format ) { // sniff from the extension - sal_Int32 idx = sUrl.lastIndexOf( "." ); + sal_Int32 idx = aURL.lastIndexOf( "." ); if( idx > 0 ) { - sFormat = sUrl.copy( idx + 1 ); + sFormat = aURL.copy( idx + 1 ); } else { @@ -239,7 +243,7 @@ bool LibLODocument_Impl::saveAs (const char *url, const char *format) aSeq[1].Value <<= aFilterName; uno::Reference< frame::XStorable > xStorable( mxComponent, uno::UNO_QUERY_THROW ); - xStorable->storeToURL( sAbsoluteDocUrl, aSeq ); + xStorable->storeToURL( aURL, aSeq ); return true; } catch (const uno::Exception &ex) { |