diff options
author | Florian Reuter <freuter@novell.com> | 2010-11-26 14:40:03 +0100 |
---|---|---|
committer | Fridrich Štrba <fridrich.strba@bluewin.ch> | 2010-11-26 14:40:03 +0100 |
commit | 0b9ef81ba5ff08d85f21275222458a5b9b9e484c (patch) | |
tree | a4f44f2dd90662f332d5aaae50ee489f624e74ff | |
parent | ced73bee6811bb68734d9c95ca110820a1758dd2 (diff) |
tools-urlobj-smb-scheme-patch.diff: migrated
process relative SMB paths (in hyperlinks) correctly
-rw-r--r-- | tools/inc/tools/urlobj.hxx | 3 | ||||
-rw-r--r-- | tools/source/fsys/urlobj.cxx | 38 |
2 files changed, 41 insertions, 0 deletions
diff --git a/tools/inc/tools/urlobj.hxx b/tools/inc/tools/urlobj.hxx index 4783dfbefccc..558777bc966d 100644 --- a/tools/inc/tools/urlobj.hxx +++ b/tools/inc/tools/urlobj.hxx @@ -1533,6 +1533,9 @@ private: TOOLS_DLLPRIVATE static bool scanIPv6reference( sal_Unicode const *& rBegin, sal_Unicode const * pEnd); + +private: + void changeScheme(INetProtocol eTargetScheme); }; // static diff --git a/tools/source/fsys/urlobj.cxx b/tools/source/fsys/urlobj.cxx index 2b04cdc01fc6..50e945cb8db7 100644 --- a/tools/source/fsys/urlobj.cxx +++ b/tools/source/fsys/urlobj.cxx @@ -1444,10 +1444,48 @@ bool INetURLObject::setAbsURIRef(rtl::OUString const & rTheAbsURIRef, m_aAbsURIRef = aSynAbsURIRef; + // At this point references of type "\\server\paths" have + // been converted to file:://server/path". +#ifdef LINUX + if (m_eScheme==INET_PROT_FILE && !m_aHost.isEmpty()) { + // Change "file:://server/path" URIs to "smb:://server/path" on + // Linux + // Leave "file::path" URIs unchanged. + changeScheme(INET_PROT_SMB); + } +#endif + +#ifdef WIN + if (m_eScheme==INET_PROT_SMB) { + // Change "smb://server/path" URIs to "file://server/path" + // URIs on Windows, since Windows doesn't understand the + // SMB scheme. + changeScheme(INET_PROT_FILE); + } +#endif + return true; } //============================================================================ +void INetURLObject::changeScheme(INetProtocol eTargetScheme) { + ::rtl::OUString aTmpStr=m_aAbsURIRef.makeStringAndClear(); + int oldSchemeLen=strlen(getSchemeInfo().m_pScheme); + m_eScheme=eTargetScheme; + int newSchemeLen=strlen(getSchemeInfo().m_pScheme); + m_aAbsURIRef.appendAscii(getSchemeInfo().m_pScheme); + m_aAbsURIRef.append(aTmpStr.getStr()+oldSchemeLen); + int delta=newSchemeLen-oldSchemeLen; + m_aUser+=delta; + m_aAuth+=delta; + m_aHost+=delta; + m_aPort+=delta; + m_aPath+=delta; + m_aQuery+=delta; + m_aFragment+=delta; +} + +//============================================================================ bool INetURLObject::convertRelToAbs(rtl::OUString const & rTheRelURIRef, bool bOctets, INetURLObject & rTheAbsURIRef, |