Index: src/libchcore/TPath.cpp
===================================================================
diff -u -N -rf18d23588f370de68d37adb285dcf5e046a8d37c -r1342b18babc7e88850e74f46cb473a737a68f28a
--- src/libchcore/TPath.cpp	(.../TPath.cpp)	(revision f18d23588f370de68d37adb285dcf5e046a8d37c)
+++ src/libchcore/TPath.cpp	(.../TPath.cpp)	(revision 1342b18babc7e88850e74f46cb473a737a68f28a)
@@ -486,6 +486,23 @@
 		return false;
 }
 
+bool TSmartPath::MakeAbsolutePath(const TSmartPath& rReferenceBasePath)
+{
+	if(!IsRelativePath())
+		return false;
+
+	bool bHasSeparator = rReferenceBasePath.EndsWithSeparator();
+	if(!bHasSeparator)
+		PrependSeparatorIfDoesNotExist();
+	else
+		StripSeparatorAtFront();
+
+	PrepareToWrite();
+	m_pPath->m_strPath = rReferenceBasePath.ToString() + m_pPath->m_strPath;
+
+	return true;
+}
+
 // ============================================================================
 /// TSmartPath::AppendIfNotExists
 /// @date 2009/11/29
@@ -1130,6 +1147,11 @@
 	return (wchSeparator == _T('\\') || wchSeparator == _T('/'));
 }
 
+bool TSmartPath::IsRelativePath() const
+{
+	return !HasDrive() && !HasServerName();
+}
+
 // ============================================================================
 /// chcore::PathFromString
 /// @date 2010/10/12