summaryrefslogtreecommitdiff
path: root/tools/source/fsys/urlobj.cxx
diff options
context:
space:
mode:
authorFlorian Reuter <freuter@novell.com>2010-11-26 14:40:03 +0100
committerFridrich Štrba <fridrich.strba@bluewin.ch>2010-11-26 14:40:03 +0100
commit0b9ef81ba5ff08d85f21275222458a5b9b9e484c (patch)
treea4f44f2dd90662f332d5aaae50ee489f624e74ff /tools/source/fsys/urlobj.cxx
parentced73bee6811bb68734d9c95ca110820a1758dd2 (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.cxx38
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,