diff options
author | Joachim Lingner <jl@openoffice.org> | 2004-05-06 10:44:47 +0000 |
---|---|---|
committer | Joachim Lingner <jl@openoffice.org> | 2004-05-06 10:44:47 +0000 |
commit | b21347f0dce6d55c17a4f82946a9a092a1259a2a (patch) | |
tree | e51edbebf7c1b24ee155880aff46ab95c40ca899 /jvmfwk | |
parent | 70695eea3198f6a1289929e58e8906f9bfc55974 (diff) |
#i20052#
Diffstat (limited to 'jvmfwk')
-rw-r--r-- | jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx | 98 |
1 files changed, 89 insertions, 9 deletions
diff --git a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx index 2171502c2991..31683d0520c3 100644 --- a/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx +++ b/jvmfwk/plugins/sunmajor/pluginlib/sunjavaplugin.cxx @@ -2,9 +2,9 @@ * * $RCSfile: sunjavaplugin.cxx,v $ * - * $Revision: 1.6 $ + * $Revision: 1.7 $ * - * last change: $Author: jl $ $Date: 2004-05-05 14:11:18 $ + * last change: $Author: jl $ $Date: 2004-05-06 11:44:47 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -69,6 +69,7 @@ #include "osl/module.hxx" #include "osl/mutex.hxx" #include "osl/thread.hxx" +#include "osl/file.hxx" #include "rtl/instance.hxx" #include "osl/getglobalmutex.hxx" #include <setjmp.h> @@ -83,6 +84,8 @@ #define OUSTR(x) ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM(x) ) #define SUN_MICRO "Sun Microsystems Inc." + +using namespace osl; namespace { struct Init @@ -100,12 +103,65 @@ osl::Mutex * getPluginMutex() Init(), ::osl::GetGlobalMutex()); } +#if defined UNX +rtl::OString getPluginJarPath(const rtl::OUString& sLocation, const rtl::OUString& sVersion) +{ + rtl::OString ret; + rtl::OUString sName1(RTL_CONSTASCII_USTRINGPARAM("javaplugin.jar")); + rtl::OUString sName2(RTL_CONSTASCII_USTRINGPARAM("plugin.jar")); + rtl::OUString sVer1_4_2(RTL_CONSTASCII_USTRINGPARAM("1.4.2")); + rtl::OUString sVer1_5_0(RTL_CONSTASCII_USTRINGPARAM("1.5.0")); + rtl::OUString sName; + if (stoc_javadetect::JavaInfo::compareVersions( + sVersion, sVer1_4_2) == -1) + { + sName = sName1; + } + else if (stoc_javadetect::JavaInfo::compareVersions( + sVersion, sVer1_5_0) == -1) + { + sName = sName2; + } + + if (sName.getLength() == 0) + return ret; + + //try both SDK or Lib + rtl::OUString sJarUrl; + DirectoryItem item; + rtl::OUString jarPath(sLocation + OUSTR("/lib/") + + sName); + if(DirectoryItem::get(jarPath, item) == File::E_None) + { + sJarUrl = jarPath; + } + else + { + rtl::OUString jarPath2(sLocation + OUSTR("/jre/lib/") + + sName); + if(DirectoryItem::get(jarPath2, item) == File::E_None) + { + sJarUrl = jarPath2; + } + } + if (sJarUrl.getLength() == 0) + return ret; + rtl::OUString sPath; + if (osl_getSystemPathFromFileURL(sJarUrl.pData, & sPath.pData) + == osl_File_E_None) + { + ret = rtl::OUStringToOString(sPath, osl_getThreadTextEncoding()); + } + return ret; +} +#endif // UNX + JavaInfo* createJavaInfo(const stoc_javadetect::JavaInfo & info) { JavaInfo* pInfo = (JavaInfo*) rtl_allocateMemory(sizeof(JavaInfo)); if (pInfo == NULL) return NULL; - rtl::OUString sVendor(OUSTR("Sun Microsystems Inc.")); + rtl::OUString sVendor(OUSTR(SUN_MICRO)); pInfo->sVendor = sVendor.pData; rtl_uString_acquire(sVendor.pData); pInfo->sLocation = info.usJavaHome.pData; @@ -321,6 +377,9 @@ javaPluginError startJavaVirtualMachine( rtl::OString osJavaHome = rtl::OUStringToOString( javaHome, osl_getThreadTextEncoding()); putenv(strdup(osJavaHome.getStr())); +#if OSL_DEBUG_LEVEL >=2 + fprintf(stderr, "Setting JAVA_HOME: %s\n", osJavaHome.getStr()); +#endif #endif typedef jint JNICALL JNI_InitArgs_Type(void *); @@ -368,15 +427,38 @@ javaPluginError startJavaVirtualMachine( // We set an abort handler which is called when the VM calls _exit during // JNI_CreateJavaVM. This happens when the LD_LIBRARY_PATH does not contain // all some directories of the Java installation. This is necessary for - // linux j2re1.3, 1.4 and Solaris j2re1.3. With a j2re1.4 on Solaris the - // LD_LIBRARY_PATH need not to be set anymore. + // all versions below 1.5.1 options[0].optionString= "abort"; options[0].extraInfo= (void* )abort_handler; int index = 1; + rtl::OString sClassPathProp("-Djava.class.path="); + rtl::OString sClassPathOption; for (int i = 0; i < cOptions; i++) { - options[i+1].optionString = arOptions[i].optionString; - options[i+1].extraInfo = arOptions[i].extraInfo; +#ifdef UNX + // Until java 1.5 we need to put a plugin.jar or javaplugin.jar (<1.4.2) + // in the class path in orderto have applet support. + rtl::OString sClassPath = arOptions[i].optionString; + if (sClassPath.match(sClassPathProp, 0) == sal_True) + { +// char sep[] = {SAL_PATHSEPARATOR, 0}; + sClassPathOption = sClassPath + //rtl::OString(sep) + + getPluginJarPath(pInfo->sLocation,pInfo->sVersion); + options[i+1].optionString = (char *) sClassPathOption.getStr(); + options[i+1].extraInfo = arOptions[i].extraInfo; + } + else + { +#endif + options[i+1].optionString = arOptions[i].optionString; + options[i+1].extraInfo = arOptions[i].extraInfo; +#ifdef UNX + } +#endif +#if OSL_DEBUG_LEVEL >= 2 + fprintf(stderr, "VM option: %s\n", options[i+1].optionString); +#endif + } vm_args.version= JNI_VERSION_1_2; @@ -433,5 +515,3 @@ javaPluginError startJavaVirtualMachine( - - |