summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2017-04-11 18:04:54 +0200
committerStephan Bergmann <sbergman@redhat.com>2017-04-11 18:04:54 +0200
commitf0454e72c1d1b11c3bcbacb23048a62fdecd037c (patch)
tree14159abbfbc60777e4c6fbf7d711aed22bac33fd
parent6bb4c48812224237c29acf31264cc05e2938f242 (diff)
Use std::unique_ptr<JavaInfo> for lifecycle management in jvmfwk/framework.hxx
Change-Id: Ie604c75e92c407ff3118aaa58155648d956c91fb
-rw-r--r--cui/source/options/optjava.cxx85
-rw-r--r--cui/source/options/optjava.hxx8
-rw-r--r--desktop/source/migration/services/jvmfwk.cxx7
-rw-r--r--include/jvmfwk/framework.hxx56
-rw-r--r--jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx21
-rw-r--r--jvmfwk/source/framework.cxx63
-rw-r--r--stoc/source/javavm/javavm.cxx20
7 files changed, 99 insertions, 161 deletions
diff --git a/cui/source/options/optjava.cxx b/cui/source/options/optjava.cxx
index bef9f2543ec3..51f8b37b98e5 100644
--- a/cui/source/options/optjava.cxx
+++ b/cui/source/options/optjava.cxx
@@ -139,10 +139,8 @@ SvxJavaOptionsPage::SvxJavaOptionsPage( vcl::Window* pParent, const SfxItemSet&
, m_pParamDlg(nullptr)
, m_pPathDlg(nullptr)
#if HAVE_FEATURE_JAVA
- , m_parJavaInfo(nullptr)
, m_parParameters(nullptr)
, m_pClassPath(nullptr)
- , m_nInfoSize(0)
, m_nParamSize(0)
#endif
, m_aResetIdle("cui options SvxJavaOptionsPage Reset")
@@ -221,12 +219,6 @@ void SvxJavaOptionsPage::dispose()
m_pPathDlg.disposeAndClear();
ClearJavaInfo();
#if HAVE_FEATURE_JAVA
- std::vector< JavaInfo* >::iterator pIter;
- for ( pIter = m_aAddedInfos.begin(); pIter != m_aAddedInfos.end(); ++pIter )
- {
- JavaInfo* pInfo = *pIter;
- delete pInfo;
- }
m_aAddedInfos.clear();
jfw_unlock();
@@ -447,19 +439,7 @@ IMPL_LINK_NOARG( SvxJavaOptionsPage, ExpertConfigHdl_Impl, Button*, void )
void SvxJavaOptionsPage::ClearJavaInfo()
{
#if HAVE_FEATURE_JAVA
- if ( m_parJavaInfo )
- {
- JavaInfo** parInfo = m_parJavaInfo;
- for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
- {
- JavaInfo* pInfo = *parInfo++;
- delete pInfo;
- }
-
- rtl_freeMemory( m_parJavaInfo );
- m_parJavaInfo = nullptr;
- m_nInfoSize = 0;
- }
+ m_parJavaInfo.clear();
#else
(void) this;
#endif
@@ -483,50 +463,44 @@ void SvxJavaOptionsPage::LoadJREs()
{
#if HAVE_FEATURE_JAVA
WaitObject aWaitObj(m_pJavaList);
- javaFrameworkError eErr = jfw_findAllJREs( &m_parJavaInfo, &m_nInfoSize );
- if ( JFW_E_NONE == eErr && m_parJavaInfo )
+ javaFrameworkError eErr = jfw_findAllJREs( &m_parJavaInfo );
+ if ( JFW_E_NONE == eErr )
{
- JavaInfo** parInfo = m_parJavaInfo;
- for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
+ for (auto const & pInfo: m_parJavaInfo)
{
- JavaInfo* pInfo = *parInfo++;
- AddJRE( pInfo );
+ AddJRE( pInfo.get() );
}
}
- std::vector< JavaInfo* >::iterator pIter;
- for ( pIter = m_aAddedInfos.begin(); pIter != m_aAddedInfos.end(); ++pIter )
+ for (auto const & pInfo: m_aAddedInfos)
{
- JavaInfo* pInfo = *pIter;
- AddJRE( pInfo );
+ AddJRE( pInfo.get() );
}
- JavaInfo* pSelectedJava = nullptr;
+ std::unique_ptr<JavaInfo> pSelectedJava;
eErr = jfw_getSelectedJRE( &pSelectedJava );
if ( JFW_E_NONE == eErr && pSelectedJava )
{
- JavaInfo** parInfo = m_parJavaInfo;
- for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
+ sal_Int32 i = 0;
+ for (auto const & pCmpInfo: m_parJavaInfo)
{
- JavaInfo* pCmpInfo = *parInfo++;
- if ( jfw_areEqualJavaInfo( pCmpInfo, pSelectedJava ) )
+ if ( jfw_areEqualJavaInfo( pCmpInfo.get(), pSelectedJava.get() ) )
{
SvTreeListEntry* pEntry = m_pJavaList->GetEntry(i);
if ( pEntry )
m_pJavaList->HandleEntryChecked( pEntry );
break;
}
+ ++i;
}
}
-
- delete pSelectedJava;
#else
(void) this;
#endif
}
-void SvxJavaOptionsPage::AddJRE( JavaInfo* _pInfo )
+void SvxJavaOptionsPage::AddJRE( JavaInfo const * _pInfo )
{
#if HAVE_FEATURE_JAVA
OUStringBuffer sEntry;
@@ -573,17 +547,15 @@ void SvxJavaOptionsPage::AddFolder( const OUString& _rFolder )
{
#if HAVE_FEATURE_JAVA
bool bStartAgain = true;
- JavaInfo* pInfo = nullptr;
+ std::unique_ptr<JavaInfo> pInfo;
javaFrameworkError eErr = jfw_getJavaInfoByPath( _rFolder.pData, &pInfo );
if ( JFW_E_NONE == eErr && pInfo )
{
sal_Int32 nPos = 0;
bool bFound = false;
- JavaInfo** parInfo = m_parJavaInfo;
- for ( sal_Int32 i = 0; i < m_nInfoSize; ++i )
+ for (auto const & pCmpInfo: m_parJavaInfo)
{
- JavaInfo* pCmpInfo = *parInfo++;
- if ( jfw_areEqualJavaInfo( pCmpInfo, pInfo ) )
+ if ( jfw_areEqualJavaInfo( pCmpInfo.get(), pInfo.get() ) )
{
bFound = true;
break;
@@ -593,11 +565,9 @@ void SvxJavaOptionsPage::AddFolder( const OUString& _rFolder )
if ( !bFound )
{
- std::vector< JavaInfo* >::iterator pIter;
- for ( pIter = m_aAddedInfos.begin(); pIter != m_aAddedInfos.end(); ++pIter )
+ for (auto const & pCmpInfo: m_aAddedInfos)
{
- JavaInfo* pCmpInfo = *pIter;
- if ( jfw_areEqualJavaInfo( pCmpInfo, pInfo ) )
+ if ( jfw_areEqualJavaInfo( pCmpInfo.get(), pInfo.get() ) )
{
bFound = true;
break;
@@ -609,12 +579,10 @@ void SvxJavaOptionsPage::AddFolder( const OUString& _rFolder )
if ( !bFound )
{
jfw_addJRELocation( pInfo->sLocation.pData );
- AddJRE( pInfo );
- m_aAddedInfos.push_back( pInfo );
+ AddJRE( pInfo.get() );
+ m_aAddedInfos.push_back( std::move(pInfo) );
nPos = m_pJavaList->GetEntryCount() - 1;
}
- else
- delete pInfo;
SvTreeListEntry* pEntry = m_pJavaList->GetEntry( nPos );
m_pJavaList->Select( pEntry );
@@ -703,17 +671,17 @@ bool SvxJavaOptionsPage::FillItemSet( SfxItemSet* /*rCoreSet*/ )
{
if ( m_pJavaList->GetCheckButtonState( m_pJavaList->GetEntry(i) ) == SvButtonState::Checked )
{
- JavaInfo* pInfo = nullptr;
- if ( i < static_cast< sal_uLong >( m_nInfoSize ) )
- pInfo = m_parJavaInfo[i];
+ JavaInfo const * pInfo;
+ if ( i < m_parJavaInfo.size() )
+ pInfo = m_parJavaInfo[i].get();
else
- pInfo = m_aAddedInfos[ i - m_nInfoSize ];
+ pInfo = m_aAddedInfos[ i - m_parJavaInfo.size() ].get();
- JavaInfo* pSelectedJava = nullptr;
+ std::unique_ptr<JavaInfo> pSelectedJava;
eErr = jfw_getSelectedJRE( &pSelectedJava );
if ( JFW_E_NONE == eErr || JFW_E_INVALID_SETTINGS == eErr )
{
- if (pSelectedJava == nullptr || !jfw_areEqualJavaInfo( pInfo, pSelectedJava ) )
+ if (!pSelectedJava || !jfw_areEqualJavaInfo( pInfo, pSelectedJava.get() ) )
{
sal_Bool bRunning = false;
eErr = jfw_isVMRunning( &bRunning );
@@ -732,7 +700,6 @@ bool SvxJavaOptionsPage::FillItemSet( SfxItemSet* /*rCoreSet*/ )
bModified = true;
}
}
- delete pSelectedJava;
break;
}
}
diff --git a/cui/source/options/optjava.hxx b/cui/source/options/optjava.hxx
index 22a24e8950fb..6b301d2e229c 100644
--- a/cui/source/options/optjava.hxx
+++ b/cui/source/options/optjava.hxx
@@ -21,6 +21,7 @@
#include <config_features.h>
+#include <memory>
#include <vector>
#include <ucbhelper/content.hxx>
#include <vcl/button.hxx>
@@ -64,10 +65,9 @@ private:
VclPtr<SvxJavaClassPathDlg> m_pPathDlg;
#if HAVE_FEATURE_JAVA
- JavaInfo** m_parJavaInfo;
+ std::vector<std::unique_ptr<JavaInfo>> m_parJavaInfo;
rtl_uString** m_parParameters;
rtl_uString* m_pClassPath;
- sal_Int32 m_nInfoSize;
sal_Int32 m_nParamSize;
#endif
OUString m_sInstallText;
@@ -78,7 +78,7 @@ private:
VclPtr<CheckBox> m_pExperimentalCB;
VclPtr<CheckBox> m_pMacroCB;
- std::vector< JavaInfo* >
+ std::vector<std::unique_ptr<JavaInfo>>
m_aAddedInfos;
rtl::Reference< ::svt::DialogClosedListener > xDialogListener;
@@ -100,7 +100,7 @@ private:
void ClearJavaInfo();
void ClearJavaList();
void LoadJREs();
- void AddJRE( JavaInfo* _pInfo );
+ void AddJRE( JavaInfo const * _pInfo );
void HandleCheckEntry( SvTreeListEntry* _pEntry );
void AddFolder( const OUString& _rFolder );
diff --git a/desktop/source/migration/services/jvmfwk.cxx b/desktop/source/migration/services/jvmfwk.cxx
index 042609a69433..9fb42e96c9e8 100644
--- a/desktop/source/migration/services/jvmfwk.cxx
+++ b/desktop/source/migration/services/jvmfwk.cxx
@@ -37,6 +37,7 @@
#include <com/sun/star/configuration/backend/TemplateIdentifier.hpp>
#include <jvmfwk/framework.hxx>
#include "jvmfwk.hxx"
+#include <memory>
#include <stack>
#include <stdio.h>
@@ -237,12 +238,12 @@ void JavaMigration::migrateJavarc()
if (bSuccess && !sValue.isEmpty())
{
//get the directory
- jfw::JavaInfoGuard aInfo;
- javaFrameworkError err = jfw_getJavaInfoByPath(sValue.pData, &aInfo.info);
+ std::unique_ptr<JavaInfo> aInfo;
+ javaFrameworkError err = jfw_getJavaInfoByPath(sValue.pData, &aInfo);
if (err == JFW_E_NONE)
{
- if (jfw_setSelectedJRE(aInfo.info) != JFW_E_NONE)
+ if (jfw_setSelectedJRE(aInfo.get()) != JFW_E_NONE)
{
OSL_FAIL("[Service implementation " IMPL_NAME
"] XJob::execute: jfw_setSelectedJRE failed.");
diff --git a/include/jvmfwk/framework.hxx b/include/jvmfwk/framework.hxx
index 8f3a3a0022b9..99d25da9c03e 100644
--- a/include/jvmfwk/framework.hxx
+++ b/include/jvmfwk/framework.hxx
@@ -22,6 +22,11 @@
#ifndef INCLUDED_JVMFWK_FRAMEWORK_HXX
#define INCLUDED_JVMFWK_FRAMEWORK_HXX
+#include <sal/config.h>
+
+#include <memory>
+#include <vector>
+
#include <jvmfwk/jvmfwkdllapi.hxx>
#include <rtl/byteseq.hxx>
#include <rtl/ustring.h>
@@ -255,26 +260,6 @@ struct JavaInfo
rtl::ByteSequence arVendorData;
};
-namespace jfw {
-
-struct JavaInfoGuard {
- JavaInfoGuard(JavaInfoGuard &) = delete;
- void operator =(JavaInfoGuard) = delete;
-
- JavaInfoGuard(): info(nullptr) {}
-
- ~JavaInfoGuard() { delete info; }
-
- void clear() {
- delete info;
- info = nullptr;
- }
-
- JavaInfo * info;
-};
-
-}
-
/** compares two <code>JavaInfo</code> objects for equality.
<p>Two <code>JavaInfo</code> objects are said to be equal if the contained
@@ -371,13 +356,11 @@ JVMFWK_DLLPUBLIC javaFrameworkError jfw_isVMRunning(sal_Bool *bRunning);
the first <code>JavaInfo</code> object that is detected by the algorithm
as described above is used.</p>
- @param ppInfo
+ @param pInfo
[out] a <code>JavaInfo</code> pointer, representing the selected JRE.
- The caller has to delete it. The
- <code>JavaInfo</code> is for informational purposes only. It is not
+ The <code>JavaInfo</code> is for informational purposes only. It is not
necessary to call <code>jfw_setSelectedJRE</code> afterwards.<br/>
- <code>ppInfo</code>can be NULL. If <code>*ppInfo</code> is not null, then it is
- overwritten, without attempting to free <code>*ppInfo</code>.
+ <code>pInfo</code>can be NULL.
@return
JFW_E_NONE function ran successfully.<br/>
@@ -387,7 +370,7 @@ JVMFWK_DLLPUBLIC javaFrameworkError jfw_isVMRunning(sal_Bool *bRunning);
JFW_E_CONFIGURATION mode was not properly set or their prerequisites
were not met.
*/
-JVMFWK_DLLPUBLIC javaFrameworkError jfw_findAndSelectJRE(JavaInfo **pInfo);
+JVMFWK_DLLPUBLIC javaFrameworkError jfw_findAndSelectJRE(std::unique_ptr<JavaInfo> *pInfo);
/** provides information about all available JRE installations.
@@ -401,22 +384,18 @@ JVMFWK_DLLPUBLIC javaFrameworkError jfw_findAndSelectJRE(JavaInfo **pInfo);
already an equal object.</p>
@param parInfo
- [out] on returns it contains a pointer to an array of <code>JavaInfo</code>
- pointers.
- The caller must free the array with <code>rtl_freeMemory</code> and each
- element of the array must be deleted.
- @param pSize
- [out] on return contains the size of array returned in <code>parInfo</code>.
+ [out] on returns it contains a vector of <code>JavaInfo</code> pointers.
+ Any previously contained elements are removed first.
@return
JFW_E_NONE function ran successfully.<br/>
- JFW_E_INVALID_ARG at least on of the parameters was NULL<br/>
+ JFW_E_INVALID_ARG parInfo was NULL<br/>
JFW_E_ERROR an error occurred. <br/>
JFW_E_CONFIGURATION mode was not properly set or their prerequisites
were not met.
*/
JVMFWK_DLLPUBLIC javaFrameworkError jfw_findAllJREs(
- JavaInfo ***parInfo, sal_Int32 *pSize);
+ std::vector<std::unique_ptr<JavaInfo>> *parInfo);
/** determines if a path points to a Java installation.
@@ -433,7 +412,7 @@ JVMFWK_DLLPUBLIC javaFrameworkError jfw_findAllJREs(
@param pPath
[in] a file URL to a directory.
- @param pInfo
+ @param ppInfo
[out] the <code>JavaInfo</code> object which represents a JRE found at the
location specified by <code>pPath</code>
@@ -448,7 +427,7 @@ JVMFWK_DLLPUBLIC javaFrameworkError jfw_findAllJREs(
requirements as determined by the javavendors.xml
*/
JVMFWK_DLLPUBLIC javaFrameworkError jfw_getJavaInfoByPath(
- rtl_uString *pPath, JavaInfo **ppInfo);
+ rtl_uString *pPath, std::unique_ptr<JavaInfo> *ppInfo);
/** starts a Java Virtual Machine (JVM).
@@ -564,8 +543,7 @@ JVMFWK_DLLPUBLIC javaFrameworkError jfw_setSelectedJRE(JavaInfo const *pInfo);
@param ppInfo
[out] on return it contains a pointer to a <code>JavaInfo</code> object
that represents the currently selected JRE. When <code>*ppInfo</code> is not
- NULL then the function overwrites the pointer. It is not attempted to free
- the pointer.
+ NULL then the function sets the pointer.
@return
JFW_E_NONE function ran successfully.<br/>
@@ -575,7 +553,7 @@ JVMFWK_DLLPUBLIC javaFrameworkError jfw_setSelectedJRE(JavaInfo const *pInfo);
JFW_E_INVALID_SETTINGS the javavendors.xml has been changed and no
JRE has been selected afterwards. <br/>
*/
-JVMFWK_DLLPUBLIC javaFrameworkError jfw_getSelectedJRE(JavaInfo **ppInfo);
+JVMFWK_DLLPUBLIC javaFrameworkError jfw_getSelectedJRE(std::unique_ptr<JavaInfo> *ppInfo);
/** determines if Java can be used.
diff --git a/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx b/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx
index 718902caba6f..3c1b1901eb75 100644
--- a/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx
+++ b/jvmfwk/plugins/sunmajor/javaenvsetup/javaldx.cxx
@@ -17,6 +17,9 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
+#include <sal/config.h>
+
+#include <memory>
#include <stdio.h>
#include <stdlib.h>
@@ -31,7 +34,7 @@
static bool hasOption(char const * szOption, int argc, char** argv);
static OString getLD_LIBRARY_PATH(const rtl::ByteSequence & vendorData);
-static bool findAndSelect(JavaInfo**);
+static bool findAndSelect(std::unique_ptr<JavaInfo>*);
#define HELP_TEXT \
"\njavaldx is necessary to make Java work on some UNIX platforms." \
@@ -64,8 +67,8 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
return -1;
}
- jfw::JavaInfoGuard aInfo;
- errcode = jfw_getSelectedJRE(&aInfo.info);
+ std::unique_ptr<JavaInfo> aInfo;
+ errcode = jfw_getSelectedJRE(&aInfo);
if (errcode != JFW_E_NONE && errcode != JFW_E_INVALID_SETTINGS)
{
@@ -73,19 +76,19 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
return -1;
}
- if (aInfo.info == nullptr)
+ if (!aInfo)
{
- if (!findAndSelect(&aInfo.info))
+ if (!findAndSelect(&aInfo))
return -1;
}
else
{
//check if the JRE was not uninstalled
sal_Bool bExist = false;
- errcode = jfw_existJRE(aInfo.info, &bExist);
+ errcode = jfw_existJRE(aInfo.get(), &bExist);
if (errcode == JFW_E_NONE)
{
- if (!bExist && !findAndSelect(&aInfo.info))
+ if (!bExist && !findAndSelect(&aInfo))
return -1;
}
else
@@ -95,7 +98,7 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS(argc, argv)
}
}
- OString sPaths = getLD_LIBRARY_PATH(aInfo.info->arVendorData);
+ OString sPaths = getLD_LIBRARY_PATH(aInfo->arVendorData);
fprintf(stdout, "%s\n", sPaths.getStr());
}
catch (const std::exception&)
@@ -135,7 +138,7 @@ static bool hasOption(char const * szOption, int argc, char** argv)
return retVal;
}
-static bool findAndSelect(JavaInfo ** ppInfo)
+static bool findAndSelect(std::unique_ptr<JavaInfo> * ppInfo)
{
javaFrameworkError errcode = jfw_findAndSelectJRE(ppInfo);
if (errcode == JFW_E_NO_JAVA_FOUND)
diff --git a/jvmfwk/source/framework.cxx b/jvmfwk/source/framework.cxx
index 22d066516326..218e2ecad297 100644
--- a/jvmfwk/source/framework.cxx
+++ b/jvmfwk/source/framework.cxx
@@ -47,13 +47,14 @@ bool areEqualJavaInfo(
}
-javaFrameworkError jfw_findAllJREs(JavaInfo ***pparInfo, sal_Int32 *pSize)
+javaFrameworkError jfw_findAllJREs(std::vector<std::unique_ptr<JavaInfo>> *pparInfo)
{
try
{
osl::MutexGuard guard(jfw::FwkMutex::get());
- if (pparInfo == nullptr || pSize == nullptr)
+ if (pparInfo == nullptr)
return JFW_E_INVALID_ARG;
+ pparInfo->clear();
jfw::VendorSettings aVendorSettings;
std::vector<OUString> vecVendors =
@@ -167,23 +168,15 @@ javaFrameworkError jfw_findAllJREs(JavaInfo ***pparInfo, sal_Int32 *pSize)
if (it_duplicate != vecInfoManual2.end())
vecInfoManual2.erase(it_duplicate);
}
- //create an fill the array of JavaInfo*
- sal_Int32 nSize = vecInfo.size() + vecInfoManual2.size();
- *pparInfo = static_cast<JavaInfo**>(rtl_allocateMemory(
- nSize * sizeof(JavaInfo*)));
- if (*pparInfo == nullptr)
- return JFW_E_ERROR;
typedef std::vector<jfw::CJavaInfo>::iterator it;
- int index = 0;
//Add the automatically detected JREs
for (it k = vecInfo.begin(); k != vecInfo.end(); ++k)
- (*pparInfo)[index++] = k->detach();
+ pparInfo->push_back(std::unique_ptr<JavaInfo>(k->detach()));
//Add the manually detected JREs
for (it l = vecInfoManual2.begin(); l != vecInfoManual2.end(); ++l)
- (*pparInfo)[index++] = l->detach();
+ pparInfo->push_back(std::unique_ptr<JavaInfo>(l->detach()));
- *pSize = nSize;
return JFW_E_NONE;
}
catch (const jfw::FrameworkException& e)
@@ -216,7 +209,7 @@ javaFrameworkError jfw_startVM(
std::vector<OString> vmParams;
OString sUserClassPath;
- jfw::CJavaInfo aInfo;
+ std::unique_ptr<JavaInfo> aInfo;
if (pInfo == nullptr)
{
jfw::JFW_MODE mode = jfw::getMode();
@@ -225,9 +218,9 @@ javaFrameworkError jfw_startVM(
const jfw::MergedSettings settings;
if (!settings.getEnabled())
return JFW_E_JAVA_DISABLED;
- aInfo.attach(settings.createJavaInfo());
+ aInfo.reset(settings.createJavaInfo());
//check if a Java has ever been selected
- if (aInfo == nullptr)
+ if (!aInfo)
return JFW_E_NO_SELECT;
#ifdef _WIN32
@@ -241,7 +234,7 @@ javaFrameworkError jfw_startVM(
{
// If no JRE has been selected then we do not select one. This function shall then
//return JFW_E_NO_SELECT
- if (aInfo != nullptr &&
+ if (aInfo &&
(aInfo->nFeatures & JFW_FEATURE_ACCESSBRIDGE) == 0)
{
//has the user manually selected a JRE?
@@ -281,7 +274,7 @@ javaFrameworkError jfw_startVM(
} // end mode FWK_MODE_OFFICE
else if (mode == jfw::JFW_MODE_DIRECT)
{
- errcode = jfw_getSelectedJRE(&aInfo.pInfo);
+ errcode = jfw_getSelectedJRE(&aInfo);
if (errcode != JFW_E_NONE)
return errcode;
//In direct mode the options are specified by bootstrap variables
@@ -292,7 +285,7 @@ javaFrameworkError jfw_startVM(
}
else
OSL_ASSERT(false);
- pInfo = aInfo.pInfo;
+ pInfo = aInfo.get();
}
assert(pInfo != nullptr);
@@ -369,7 +362,7 @@ javaFrameworkError jfw_startVM(
PATH environment variables. If no suitable JavaInfo is found there, it
inspects all JavaInfos found by the jfw_plugin_get* functions.
*/
-javaFrameworkError jfw_findAndSelectJRE(JavaInfo **pInfo)
+javaFrameworkError jfw_findAndSelectJRE(std::unique_ptr<JavaInfo> *pInfo)
{
javaFrameworkError errcode = JFW_E_NONE;
try
@@ -603,7 +596,7 @@ javaFrameworkError jfw_findAndSelectJRE(JavaInfo **pInfo)
if (pInfo !=nullptr)
{
//copy to out param
- *pInfo = jfw::CJavaInfo::copyJavaInfo(aCurrentInfo.pInfo);
+ pInfo->reset(jfw::CJavaInfo::copyJavaInfo(aCurrentInfo.pInfo));
}
}
else
@@ -639,7 +632,7 @@ bool jfw_areEqualJavaInfo(JavaInfo const * pInfoA,JavaInfo const * pInfoB)
return false;
}
-javaFrameworkError jfw_getSelectedJRE(JavaInfo **ppInfo)
+javaFrameworkError jfw_getSelectedJRE(std::unique_ptr<JavaInfo> *ppInfo)
{
javaFrameworkError errcode = JFW_E_NONE;
try
@@ -652,8 +645,7 @@ javaFrameworkError jfw_getSelectedJRE(JavaInfo **ppInfo)
{
OUString sJRE = jfw::BootParams::getJREHome();
- jfw::CJavaInfo aInfo;
- if ((errcode = jfw_getJavaInfoByPath(sJRE.pData, & aInfo.pInfo))
+ if ((errcode = jfw_getJavaInfoByPath(sJRE.pData, ppInfo))
!= JFW_E_NONE)
throw jfw::FrameworkException(
JFW_E_CONFIGURATION,
@@ -663,16 +655,13 @@ javaFrameworkError jfw_getSelectedJRE(JavaInfo **ppInfo)
" could not be recognized. Check the values and make sure that you "
"use a plug-in library that can recognize that JRE."));
- *ppInfo = aInfo.detach();
return JFW_E_NONE;
}
const jfw::MergedSettings settings;
- jfw::CJavaInfo aInfo;
- aInfo.attach(settings.createJavaInfo());
- if (! aInfo)
+ ppInfo->reset(settings.createJavaInfo());
+ if (! ppInfo)
{
- *ppInfo = nullptr;
return JFW_E_NONE;
}
//If the javavendors.xml has changed, then the current selected
@@ -681,8 +670,10 @@ javaFrameworkError jfw_getSelectedJRE(JavaInfo **ppInfo)
OString sUpdated = jfw::getElementUpdated();
if (!sUpdated.equals(settings.getJavaInfoAttrVendorUpdate()))
+ {
+ ppInfo->reset();
return JFW_E_INVALID_SETTINGS;
- *ppInfo = aInfo.detach();
+ }
}
catch (const jfw::FrameworkException& e)
{
@@ -705,7 +696,7 @@ javaFrameworkError jfw_isVMRunning(sal_Bool *bRunning)
return JFW_E_NONE;
}
-javaFrameworkError jfw_getJavaInfoByPath(rtl_uString *pPath, JavaInfo **ppInfo)
+javaFrameworkError jfw_getJavaInfoByPath(rtl_uString *pPath, std::unique_ptr<JavaInfo> *ppInfo)
{
javaFrameworkError errcode = JFW_E_NONE;
try
@@ -744,12 +735,12 @@ javaFrameworkError jfw_getJavaInfoByPath(rtl_uString *pPath, JavaInfo **ppInfo)
if (plerr == javaPluginError::NONE)
{
- *ppInfo = pInfo;
+ ppInfo->reset(pInfo);
break;
}
else if(plerr == javaPluginError::FailedVersion)
{//found JRE but it has the wrong version
- *ppInfo = nullptr;
+ ppInfo->reset();
errcode = JFW_E_FAILED_VERSION;
break;
}
@@ -759,7 +750,7 @@ javaFrameworkError jfw_getJavaInfoByPath(rtl_uString *pPath, JavaInfo **ppInfo)
}
OSL_ASSERT(false);
}
- if (*ppInfo == nullptr && errcode != JFW_E_FAILED_VERSION)
+ if (!*ppInfo && errcode != JFW_E_FAILED_VERSION)
errcode = JFW_E_NOT_RECOGNIZED;
}
catch (const jfw::FrameworkException& e)
@@ -782,12 +773,12 @@ javaFrameworkError jfw_setSelectedJRE(JavaInfo const *pInfo)
if (jfw::getMode() == jfw::JFW_MODE_DIRECT)
return JFW_E_DIRECT_MODE;
//check if pInfo is the selected JRE
- JavaInfo *currentInfo = nullptr;
+ std::unique_ptr<JavaInfo> currentInfo;
errcode = jfw_getSelectedJRE( & currentInfo);
if (errcode != JFW_E_NONE && errcode != JFW_E_INVALID_SETTINGS)
return errcode;
- if (!jfw_areEqualJavaInfo(currentInfo, pInfo))
+ if (!jfw_areEqualJavaInfo(currentInfo.get(), pInfo))
{
jfw::NodeJava node(jfw::NodeJava::USER);
node.setJavaInfo(pInfo, false);
@@ -795,8 +786,6 @@ javaFrameworkError jfw_setSelectedJRE(JavaInfo const *pInfo)
//remember that the JRE was selected in this process
jfw::setJavaSelected();
}
-
- delete currentInfo;
}
catch (const jfw::FrameworkException& e)
{
diff --git a/stoc/source/javavm/javavm.cxx b/stoc/source/javavm/javavm.cxx
index 7c07453e8b82..41d786f91a82 100644
--- a/stoc/source/javavm/javavm.cxx
+++ b/stoc/source/javavm/javavm.cxx
@@ -700,7 +700,7 @@ JavaVirtualMachine::getJavaVM(css::uno::Sequence< sal_Int8 > const & rProcessId)
if (aId != aProcessId)
return css::uno::Any();
- jfw::JavaInfoGuard info;
+ std::unique_ptr<JavaInfo> info;
while (!m_xVirtualMachine.is()) // retry until successful
{
stoc_javavm::JVM aJvm;
@@ -741,7 +741,7 @@ JavaVirtualMachine::getJavaVM(css::uno::Sequence< sal_Int8 > const & rProcessId)
if (getenv("STOC_FORCE_NO_JRE"))
errcode = JFW_E_NO_SELECT;
else
- errcode = jfw_startVM(info.info, arOptions, index, & m_pJavaVm,
+ errcode = jfw_startVM(info.get(), arOptions, index, & m_pJavaVm,
& pMainThreadEnv);
bool bStarted = false;
@@ -751,8 +751,8 @@ JavaVirtualMachine::getJavaVM(css::uno::Sequence< sal_Int8 > const & rProcessId)
case JFW_E_NO_SELECT:
{
// No Java configured. We silently run the Java configuration
- info.clear();
- javaFrameworkError errFind = jfw_findAndSelectJRE(&info.info);
+ info.reset();
+ javaFrameworkError errFind = jfw_findAndSelectJRE(&info);
if (getenv("STOC_FORCE_NO_JRE"))
errFind = JFW_E_NO_JAVA_FOUND;
if (errFind == JFW_E_NONE)
@@ -812,18 +812,18 @@ JavaVirtualMachine::getJavaVM(css::uno::Sequence< sal_Int8 > const & rProcessId)
//we search another one. As long as there is a javaldx, we should
//never come into this situation. javaldx checks always if the JRE
//still exist.
- jfw::JavaInfoGuard aJavaInfo;
- if (JFW_E_NONE == jfw_getSelectedJRE(&aJavaInfo.info))
+ std::unique_ptr<JavaInfo> aJavaInfo;
+ if (JFW_E_NONE == jfw_getSelectedJRE(&aJavaInfo))
{
sal_Bool bExist = false;
- if (JFW_E_NONE == jfw_existJRE(aJavaInfo.info, &bExist))
+ if (JFW_E_NONE == jfw_existJRE(aJavaInfo.get(), &bExist))
{
if (!bExist
- && ! (aJavaInfo.info->nRequirements & JFW_REQUIRE_NEEDRESTART))
+ && ! (aJavaInfo->nRequirements & JFW_REQUIRE_NEEDRESTART))
{
- info.clear();
+ info.reset();
javaFrameworkError errFind = jfw_findAndSelectJRE(
- &info.info);
+ &info);
if (errFind == JFW_E_NONE)
{
continue;