summaryrefslogtreecommitdiff
path: root/framework
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2003-04-04 16:18:28 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2003-04-04 16:18:28 +0000
commit7ae266d32f0b05ff345419124bf2c30a5860abef (patch)
treecb7a93d946fcf7441ec2269cb7cb79cfcbd6c317 /framework
parente629707dc121a18b9a01c414588e4795257d5eba (diff)
INTEGRATION: CWS fwk01 (1.1.4.2.6); FILE MERGED
2003/03/31 07:56:26 cd 1.1.4.2.6.3: #108409# Use correct name for path environment variable. Check return value before use. 2003/03/30 09:28:15 cd 1.1.4.2.6.2: #108409# Support $(path) variable 2003/03/28 07:56:06 cd 1.1.4.2.6.1: #108409# Support $(path) variable as documented
Diffstat (limited to 'framework')
-rw-r--r--framework/source/services/substitutepathvars.cxx49
1 files changed, 45 insertions, 4 deletions
diff --git a/framework/source/services/substitutepathvars.cxx b/framework/source/services/substitutepathvars.cxx
index f2825b2cff46..1d555afb2bcd 100644
--- a/framework/source/services/substitutepathvars.cxx
+++ b/framework/source/services/substitutepathvars.cxx
@@ -2,9 +2,9 @@
*
* $RCSfile: substitutepathvars.cxx,v $
*
- * $Revision: 1.2 $
+ * $Revision: 1.3 $
*
- * last change: $Author: hr $ $Date: 2003-03-25 18:21:53 $
+ * last change: $Author: hr $ $Date: 2003-04-04 17:18:28 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
@@ -200,6 +200,7 @@
#define REPLACELENGTH_WORK 7
#define REPLACELENGTH_HOME 7
#define REPLACELENGTH_TEMP 7
+#define REPLACELENGTH_PATH 7
#define REPLACELENGTH_INSTPATH 11
#define REPLACELENGTH_PROGPATH 11
#define REPLACELENGTH_USERPATH 11
@@ -306,6 +307,7 @@ static FixedVariable aFixedVarTable[] =
{ VARIABLE_WORK, PREDEFVAR_WORK, REPLACELENGTH_WORK }, // Special variable (transient)!
{ VARIABLE_HOME, PREDEFVAR_HOME, REPLACELENGTH_HOME },
{ VARIABLE_TEMP, PREDEFVAR_TEMP, REPLACELENGTH_TEMP },
+ { VARIABLE_PATH, PREDEFVAR_PATH, REPLACELENGTH_PATH },
{ VARIABLE_LANG, PREDEFVAR_LANG, REPLACELENGTH_LANG },
{ VARIABLE_LANGID, PREDEFVAR_LANGID, REPLACELENGTH_LANGID },
{ VARIABLE_VLANG, PREDEFVAR_VLANG, REPLACELENGTH_VLANG },
@@ -377,6 +379,11 @@ SubstitutePathVariables_Impl::SubstitutePathVariables_Impl( const Link& aNotifyL
m_bHostRetrieved( sal_False ),
m_bOSRetrieved( sal_False )
{
+ // Enable notification mechanism
+ // We need it to get information about changes outside these class on our configuration branch
+ Sequence< rtl::OUString > aNotifySeq( 1 );
+ aNotifySeq[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "SharePoints" ));
+ EnableNotification( aNotifySeq, sal_True );
}
SubstitutePathVariables_Impl::~SubstitutePathVariables_Impl()
@@ -732,7 +739,8 @@ SubstitutePathVariables::SubstitutePathVariables( const Reference< XMultiService
// Sort predefined/fixed variable to path length
for ( i = 0; i < PREDEFVAR_COUNT; i++ )
{
- if ( i != PREDEFVAR_WORKDIRURL )
+ if (( i != PREDEFVAR_WORKDIRURL ) &&
+ ( i != PREDEFVAR_PATH ))
{
// Special path variables, don't include into automatic resubstituion search!
// $(workdirurl) is not allowed to resubstitute! This variable is the value of path settings entry
@@ -835,7 +843,37 @@ rtl::OUString SubstitutePathVariables::GetHomeVariableValue() const
rtl::OUString SubstitutePathVariables::GetPathVariableValue() const
{
- return rtl::OUString::createFromAscii( getenv( "path" ) );
+ const PATH_EXTEND_FACTOR = 120;
+
+ rtl::OUString aRetStr;
+ const char* pEnv = getenv( "PATH" );
+
+ if ( pEnv )
+ {
+ rtl::OUString aTmp;
+ rtl::OUString aPathList( pEnv, strlen( pEnv ), gsl_getSystemTextEncoding() );
+ rtl::OUStringBuffer aPathStrBuffer( aPathList.getLength() * PATH_EXTEND_FACTOR / 100 );
+
+ sal_Bool bAppendSep = sal_False;
+ sal_Int32 nToken = 0;
+ do
+ {
+ ::rtl::OUString sToken = aPathList.getToken(0, SAL_PATHSEPARATOR, nToken);
+ if (sToken.getLength())
+ {
+ osl::FileBase::getFileURLFromSystemPath( sToken, aTmp );
+ if ( bAppendSep )
+ aPathStrBuffer.appendAscii( ";" ); // Office uses ';' as path separator
+ aPathStrBuffer.append( aTmp );
+ bAppendSep = sal_True;
+ }
+ }
+ while(nToken>=0);
+
+ aRetStr = aPathStrBuffer.makeStringAndClear();
+ }
+
+ return aRetStr;
}
rtl::OUString SubstitutePathVariables::GetLanguageString( LanguageType aLanguageType ) const
@@ -1479,6 +1517,9 @@ void SubstitutePathVariables::SetPredefinedPathVariables( PredefinedPathVariable
// quickly than the substitution service!
aPreDefPathVariables.m_FixedVar[ PREDEFVAR_WORKDIRURL ] = m_aWorkPathHelper.GetWorkPath();
+ // Set $(path) variable
+ aPreDefPathVariables.m_FixedVar[ PREDEFVAR_PATH ] = GetPathVariableValue();
+
// Set $(temp)
osl::FileBase::getTempDirURL( aTmp );
aPreDefPathVariables.m_FixedVar[ PREDEFVAR_TEMP ] = ConvertOSLtoUCBURL( aTmp );