cui/source/options/optjava.cxx |   21 +++++++++++++++++++--
 jvmfwk/source/framework.cxx    |    5 ++++-
 2 files changed, 23 insertions(+), 3 deletions(-)

New commits:
commit 3720a3cc33de681996df9a9878da66e5beef106c
Author:     Samuel Mehrbrodt <[email protected]>
AuthorDate: Thu May 25 13:41:16 2023 +0200
Commit:     Samuel Mehrbrodt <[email protected]>
CommitDate: Thu May 25 13:53:27 2023 +0200

    Allow bootstrap variables in Java user classpath settings
    
    This allows for relative paths to be configured as Java class path.
    
    Change-Id: Ie3e6bc3836fb316457e5c9f11dfb77d2fcd49ad4

diff --git a/cui/source/options/optjava.cxx b/cui/source/options/optjava.cxx
index 36540800bb62..342eb6cd4f45 100644
--- a/cui/source/options/optjava.cxx
+++ b/cui/source/options/optjava.cxx
@@ -938,13 +938,30 @@ void SvxJavaClassPathDlg::SetClassPath( const OUString& 
_rPath )
         sal_Int32 nIdx = 0;
         do
         {
-            OUString sToken = _rPath.getToken( 0, CLASSPATH_DELIMITER, nIdx );
+            sal_Int32 nextColon = _rPath.indexOf(CLASSPATH_DELIMITER, nIdx);
+            OUString sToken(
+                _rPath.copy(nIdx, nextColon > 0 ? nextColon - nIdx : 
_rPath.getLength() - nIdx));
+
+            // Detect open bootstrap variables - they might contain colons - 
we need to skip those.
+            sal_Int32 nBootstrapVarStart = sToken.indexOf("${");
+            if (nBootstrapVarStart >= 0)
+            {
+                sal_Int32 nBootstrapVarEnd = sToken.indexOf("}");
+                if (nBootstrapVarEnd == -1)
+                {
+                    // Current colon is part of bootstrap variable - skip it!
+                    nextColon = _rPath.indexOf(CLASSPATH_DELIMITER, nextColon 
+ 1);
+                    sToken = _rPath.copy(nIdx, nextColon > 0 ? nextColon - nIdx
+                                                                : 
_rPath.getLength() - nIdx);
+                }
+            }
             OUString sURL;
             osl::FileBase::getFileURLFromSystemPath(sToken, sURL); // best 
effort
             INetURLObject aURL( sURL );
             m_xPathList->append("", sToken, 
SvFileInformationManager::GetImageId(aURL));
+            nIdx = nextColon + 1;
         }
-        while (nIdx>=0);
+        while (nIdx > 0);
         // select first entry
         m_xPathList->select(0);
     }
diff --git a/jvmfwk/source/framework.cxx b/jvmfwk/source/framework.cxx
index 07916b867356..3bb3af37be4c 100644
--- a/jvmfwk/source/framework.cxx
+++ b/jvmfwk/source/framework.cxx
@@ -202,7 +202,10 @@ javaFrameworkError jfw_startVM(
                     return JFW_E_NEED_RESTART;
 
                 vmParams = settings.getVmParametersUtf8();
-                sUserClassPath = 
jfw::makeClassPathOption(settings.getUserClassPath());
+                // Expand user classpath (might contain bootstrap vars)
+                OUString sUserPath(settings.getUserClassPath());
+                rtl::Bootstrap::expandMacros(sUserPath);
+                sUserClassPath = jfw::makeClassPathOption(sUserPath);
             } // end mode FWK_MODE_OFFICE
             else if (mode == jfw::JFW_MODE_DIRECT)
             {

Reply via email to