/* -*- 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 <salhelper/dynload.hxx>
namespace salhelper
{
typedef void * (*ApiInitFunction) ();
ORealDynamicLoader::ORealDynamicLoader(ORealDynamicLoader ** ppSetToZeroInDestructor_,
const OUString& moduleName,
const OUString& initFunction,
void * pApi,
oslModule pModule)
: m_pApi(pApi)
, m_refCount(1 )
, m_pModule(pModule)
, m_strModuleName(moduleName)
, m_strInitFunction(initFunction)
, ppSetToZeroInDestructor( ppSetToZeroInDestructor_ )
{
}
ORealDynamicLoader* ORealDynamicLoader::newInstance(ORealDynamicLoader ** ppSetToZeroInDestructor,
const OUString& moduleName,
const OUString& initFunction)
{
#ifdef DISABLE_DYNLOADING
(void ) ppSetToZeroInDestructor;
(void ) moduleName;
(void ) initFunction;
return NULL;
#else
ApiInitFunction initFunc;
oslModule pModule = osl_loadModule(moduleName.pData, SAL_LOADMODULE_DEFAULT);
if ( !pModule )
{
return nullptr;
}
initFunc = reinterpret_cast <ApiInitFunction>(osl_getFunctionSymbol(
pModule, initFunction.pData));
if ( !initFunc )
{
osl_unloadModule(pModule);
return nullptr;
}
return (new ORealDynamicLoader(ppSetToZeroInDestructor, moduleName,
initFunction,
initFunc(),
pModule));
#endif
}
ORealDynamicLoader::~ORealDynamicLoader()
{
// set the address to zero
if ( ppSetToZeroInDestructor )
*ppSetToZeroInDestructor = nullptr;
if (m_pModule)
{
#ifndef DISABLE_DYNLOADING
osl_unloadModule(m_pModule);
#endif
m_pModule = nullptr;
}
}
sal_uInt32 ORealDynamicLoader::acquire()
{
return ++m_refCount;
}
sal_uInt32 ORealDynamicLoader::release()
{
sal_uInt32 nRet = --m_refCount;
if ( nRet == 0 )
delete this ;
return nRet;
}
void * ORealDynamicLoader::getApi() const
{
return m_pApi;
}
} // namespace salhelper
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Messung V0.5 in Prozent C=95 H=100 G=97
¤ Dauer der Verarbeitung: 0.0 Sekunden
(vorverarbeitet am 2026-09-29)
¤
*© Formatika GbR, Deutschland