/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #include #include #include "util.hxx" #include "sunjre.hxx" using namespace std; using namespace osl; namespace jfw_plugin { MalformedVersionException::~MalformedVersionException() = default; VendorBase::VendorBase(): m_bAccessibility(false) { } bool VendorBase::initialize(vector > props) { //get java.vendor, java.version, java.home, //javax.accessibility.assistive_technologies from system properties bool bVersion = false; bool bVendor = false; bool bHome = false; bool bAccess = false; bool bArch = false; for (auto const& prop : props) { if(! bVendor && prop.first == "java.vendor") { m_sVendor = prop.second; bVendor = true; } else if (!bVersion && prop.first == "java.version") { m_sVersion = prop.second; bVersion = true; } else if (!bHome && prop.first == "java.home") { #ifndef JVM_ONE_PATH_CHECK OUString fileURL; if (osl_getFileURLFromSystemPath(prop.second.pData,& fileURL.pData) == osl_File_E_None) { //make sure that the drive letter have all the same case //otherwise file:///c:/jre and file:///C:/jre produce two //different objects!!! if (makeDriveLetterSame( & fileURL)) { m_sHome = fileURL; bHome = true; } } #else m_sHome = prop.second; bHome = true; #endif } else if (!bArch && prop.first == "os.arch") { m_sArch = prop.second; bArch = true; } else if (!bAccess && prop.first == "javax.accessibility.assistive_technologies") { if (!prop.second.isEmpty()) { m_bAccessibility = true; bAccess = true; } } // the javax.accessibility.xxx property may not be set. Therefore we //must search through all properties. } if (!bVersion || !bVendor || !bHome || !bArch) return false; // init m_sRuntimeLibrary OSL_ASSERT(!m_sHome.isEmpty()); //call virtual function to get the possible paths to the runtime library. int size = 0; char const* const* arRtPaths = getRuntimePaths( & size); vector libpaths = getVectorFromCharArray(arRtPaths, size); bool bRt = false; for (auto const& libpath : libpaths) { //Construct an absolute path to the possible runtime OUString usRt= m_sHome + libpath; DirectoryItem item; if(DirectoryItem::get(usRt, item) == File::E_None) { //found runtime lib m_sRuntimeLibrary = usRt; bRt = true; break; } } if (!bRt) return false; // init m_sLD_LIBRARY_PATH OSL_ASSERT(!m_sHome.isEmpty()); size = 0; char const * const * arLDPaths = getLibraryPaths( & size); vector ld_paths = getVectorFromCharArray(arLDPaths, size); bool bLdPath = true; int c = 0; for (auto const& ld_path : ld_paths) { OUString usAbsUrl= m_sHome + ld_path; // convert to system path OUString usSysPath; if(File::getSystemPathFromFileURL(usAbsUrl, usSysPath) == File::E_None) { if(c > 0) m_sLD_LIBRARY_PATH+= OUStringLiteral1(SAL_PATHSEPARATOR); m_sLD_LIBRARY_PATH+= usSysPath; } else { bLdPath = false; break; } ++c; } return bLdPath; } const OUString & VendorBase::getVendor() const { return m_sVendor; } const OUString & VendorBase::getVersion() const { return m_sVersion; } const OUString & VendorBase::getHome() const { return m_sHome; } const OUString & VendorBase::getLibraryPath() const { return m_sLD_LIBRARY_PATH; } const OUString & VendorBase::getRuntimeLibrary() const { return m_sRuntimeLibrary; } bool VendorBase::isValidArch() const { // Warning: These values come from the "os.arch" property. // It is not defined what the exact values are. // Oracle JRE 8 has "x86" and "amd64", the others were found at http://lopica.sourceforge.net/os.html . // There might still be missing some options; we need to extend the check once we find out. #if defined _WIN64 return m_sArch == "amd64" || m_sArch == "x86_64"; #elif defined _WIN32 return m_sArch == "x86" || m_sArch == "i386" || m_sArch == "i686"; #else (void)this; return true; #endif } bool VendorBase::supportsAccessibility() const { return m_bAccessibility; } bool VendorBase::needsRestart() const { return !getLibraryPath().isEmpty(); } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ n> LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2017-03-25Fix typosAndrea Gelmini
2017-03-06drop various _MSC_VER < 1900 conditionalsCaolán McNamara
2017-01-17replace #ifdef SOLARIS with #ifdef __sunMichael Stahl
2016-12-30cleanup tailing backslashesJochen Nitschke
2016-09-20[API CHANGE] Remove HAVE_GCC_VISIBILITY_FEATURE, always trueStephan Bergmann
2016-07-13Remove __cplusplus-checks from apparently-C++-only filesStephan Bergmann
2016-06-29move #includes to top of fileNoel Grandin
2016-06-13tdf#98602 Duplicate code in onlineupdate/Ras-al-Ghul
2016-05-03Handle wchar_t as native C++11 type on windowsDavid Ostrovsky
2016-04-30Fix typosAndrea Gelmini
2016-03-31onlineupdate: revert SAL_N_ELEMENTS changesMichael Stahl
2016-03-31use SAL_N_ELEMENTS more widelyNoel Grandin
2016-03-31use SAL_N_ELEMENTS in for loopsNoel Grandin
2016-03-14Revert "tdf#98602 Duplicate code in onlineupdate/"Jan Holesovsky
2016-03-14tdf#98602 Duplicate code in onlineupdate/Ras-al-Ghul
2016-02-17use consistent #define checks for the Windows platformNoel Grandin
2016-02-16use consistent #define checks for the Windows platformNoel Grandin
2016-02-09Remove excess newlinesChris Sherlock
2016-02-09Formatting changes across all modulesChris Sherlock
2016-02-05Fix typosAndrea Gelmini
2016-01-10Fix typosAndrea Gelmini
2016-01-08cppcheck: noExplicitConstructorCaolán McNamara
2016-01-06onlineupdate: linking libpthread should work better than including itMichael Stahl
2016-01-06onlineupdate: Executable_updater should decide which GTK it wants to useMichael Stahl
2015-11-04onlineupdate: -Werror=unused-but-set-variableMichael Stahl
2015-11-04onlineupdate: -Werror=unused-variableMichael Stahl
2015-11-04onlineupdate: error: statement with no effectMichael Stahl
2015-10-12cppcheck:variableScopeNoel Grandin
2015-09-30Fix typosAndrea Gelmini
2015-09-18Fix typosAndrea Gelmini
2015-08-23tdf#39440 cppcheck: redundantAssignmentMichael Weghorn
2015-08-22tdf#39440 reduce scope of local variablesMichael Weghorn
2015-08-12Add the needed #ifndef instead of removing the variable.Jan Holesovsky
2015-08-11cppcheck: uninitMemberVarCaolán McNamara
2015-08-10cppcheck: arrayIndexThenCheckCaolán McNamara
2015-08-10cppcheck: unusedVariableCaolán McNamara
2015-08-03remove some unused typedefsNoel Grandin
2015-07-27remove some unused definesNoel Grandin
2015-07-22online update: Fix many warnings.Jan Holesovsky
2015-07-22online update tdf#68274: fix --enable-online-update=mar on WindowsNathan Yee
2015-07-03online update: Make the 'updater' build & link at least on Linux.Jan Holesovsky
2015-07-03online update: Add the bzip2 external.Nathan Yee
2015-07-03online update: Remove unneeded files.Nathan Yee
2015-06-29online update: Configure switch --enable-online-update=marJan Holesovsky
2015-06-29online update: Add updater executable build supportNathan Yee
2015-06-29online update: Add mar executable build supportNathan Yee
2015-06-29online update: Add preliminary support for creating MAR librariesNathan Yee
2015-06-29online update: MAR-based online update - initial import from Mozilla.Jan Holesovsky