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 /tools/source/fsys/urlobj.cxx | |
parent | ced73bee6811bb68734d9c95ca110820a1758dd2 (diff) |
tools-urlobj-smb-scheme-patch.diff: migrated
process relative SMB paths (in hyperlinks) correctly
Diffstat (limited to 'tools/source/fsys/urlobj.cxx')
-rw-r--r-- | tools/source/fsys/urlobj.cxx | 38 |
1 files changed, 38 insertions, 0 deletions
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, |