summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephan Bergmann <sbergman@redhat.com>2013-12-19 08:48:56 +0100
committerStephan Bergmann <sbergman@redhat.com>2013-12-19 08:48:56 +0100
commitae3a0c8da50b36db395984637f5ad74d3b4887bc (patch)
treec4936b9fba1f24d412d41474ebef44a5f094dbc8
parent80d977b896904a0261d32857469c1b3e7516ca1e (diff)
Add .component <implementation constructor="..." feature
...to directly call constructor functions of ComponentContext-based C++ implementations of (non-single-instance) UNO services. The case where these calls would need to be bridged across different environments (e.g., from gcc3 to gcc3:affine) is not yet implemented. bootstrap.component and expwrap.component are adapted accordingly as a proof-of- concept (which had previously been adapted to use the prefix="direct" feature, which may become unnecessary again in the end, depending on how to handle single-instance services/singletons). More to follow. Change-Id: I18682d75bcd29d3d427e31331b4ce8161dbb846d
-rw-r--r--android/experimental/DocumentLoader/native-code.cxx16
-rw-r--r--android/experimental/LibreOffice4Android/native-code.cxx16
-rw-r--r--android/experimental/desktop/native-code.cxx16
-rw-r--r--cppuhelper/source/loadsharedlibcomponentfactory.hxx19
-rw-r--r--cppuhelper/source/servicemanager.cxx156
-rw-r--r--cppuhelper/source/servicemanager.hxx31
-rw-r--r--cppuhelper/source/shlib.cxx659
-rw-r--r--include/osl/detail/component-mapping.h39
-rw-r--r--ios/experimental/LibreOffice/LibreOffice/lo.mm16
-rw-r--r--ios/experimental/TiledLibreOffice/TiledLibreOffice/lo.mm16
-rw-r--r--ios/qa/sc/filters-test.m4
-rw-r--r--ios/shared/ios_sharedlo/cxx/mlo.mm16
-rw-r--r--sax/source/expatwrap/expwrap.component11
-rw-r--r--sax/source/expatwrap/sax_expat.cxx51
-rw-r--r--sax/source/expatwrap/saxwriter.cxx52
-rw-r--r--sax/source/fastparser/fastparser.cxx50
-rw-r--r--stoc/source/defaultregistry/defaultregistry.cxx46
-rw-r--r--stoc/source/implementationregistration/implreg.cxx42
-rw-r--r--stoc/source/loader/dllcomponentloader.cxx51
-rw-r--r--stoc/source/security/access_controller.cxx40
-rw-r--r--stoc/source/security/file_policy.cxx37
-rw-r--r--stoc/source/servicemanager/servicemanager.cxx115
-rw-r--r--stoc/source/simpleregistry/simpleregistry.cxx42
-rw-r--r--stoc/util/bootstrap.component29
24 files changed, 695 insertions, 875 deletions
diff --git a/android/experimental/DocumentLoader/native-code.cxx b/android/experimental/DocumentLoader/native-code.cxx
index 43949ef26dce..2eb7cce569fc 100644
--- a/android/experimental/DocumentLoader/native-code.cxx
+++ b/android/experimental/DocumentLoader/native-code.cxx
@@ -11,11 +11,11 @@
extern "C"
__attribute__ ((visibility("default")))
-const lib_to_component_mapping *
-lo_get_library_map(void)
+const lib_to_factory_mapping *
+lo_get_factory_map(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_COMPONENT_MAP
+ static lib_to_factory_mapping map[] = {
+ NON_APP_SPECIFIC_FACTORY_MAP
{ "libanimcorelo.a", animcore_component_getFactory },
{ "libavmedialo.a", avmedia_component_getFactory },
{ "libdbalo.a", dba_component_getFactory },
@@ -62,11 +62,11 @@ lo_get_library_map(void)
extern "C"
__attribute__ ((visibility("default")))
-const lib_to_component_mapping *
-lo_get_implementation_map(void)
+const lib_to_constructor_mapping *
+lo_get_constructor_map(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_DIRECT_COMPONENT_MAP
+ static lib_to_constructor_mapping map[] = {
+ NON_APP_SPECIFIC_CONSTRUCTOR_MAP
{ NULL, NULL }
};
diff --git a/android/experimental/LibreOffice4Android/native-code.cxx b/android/experimental/LibreOffice4Android/native-code.cxx
index 2ec81496af3d..747e81669ff9 100644
--- a/android/experimental/LibreOffice4Android/native-code.cxx
+++ b/android/experimental/LibreOffice4Android/native-code.cxx
@@ -11,11 +11,11 @@
extern "C"
__attribute__ ((visibility("default")))
-const lib_to_component_mapping *
-lo_get_library_map(void)
+const lib_to_factory_mapping *
+lo_get_factory_map(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_COMPONENT_MAP
+ static lib_to_factory_mapping map[] = {
+ NON_APP_SPECIFIC_FACTORY_MAP
{ "libanimcorelo.a", animcore_component_getFactory },
{ "libavmedialo.a", avmedia_component_getFactory },
{ "libbasprov.uno.a", basprov_component_getFactory },
@@ -80,11 +80,11 @@ lo_get_library_map(void)
extern "C"
__attribute__ ((visibility("default")))
-const lib_to_component_mapping *
-lo_get_implementation_map(void)
+const lib_to_constructor_mapping *
+lo_get_constructor_map(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_DIRECT_COMPONENT_MAP
+ static lib_to_constructor_mapping map[] = {
+ NON_APP_SPECIFIC_CONSTRUCTOR_MAP
{ NULL, NULL }
};
diff --git a/android/experimental/desktop/native-code.cxx b/android/experimental/desktop/native-code.cxx
index b4f15aacae4f..3e44f522e258 100644
--- a/android/experimental/desktop/native-code.cxx
+++ b/android/experimental/desktop/native-code.cxx
@@ -11,11 +11,11 @@
extern "C"
__attribute__ ((visibility("default")))
-const lib_to_component_mapping *
-lo_get_library_map(void)
+const lib_to_factory_mapping *
+lo_get_factory_map(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_COMPONENT_MAP
+ static lib_to_factory_mapping map[] = {
+ NON_APP_SPECIFIC_FACTORY_MAP
{ "libanimcorelo.a", animcore_component_getFactory },
{ "libavmedialo.a", avmedia_component_getFactory },
{ "libbasprovlo.a", basprov_component_getFactory },
@@ -92,11 +92,11 @@ lo_get_library_map(void)
extern "C"
__attribute__ ((visibility("default")))
-const lib_to_component_mapping *
-lo_get_implementation_map(void)
+const lib_to_constructor_mapping *
+lo_get_constructor_map(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_DIRECT_COMPONENT_MAP
+ static lib_to_constructor_mapping map[] = {
+ NON_APP_SPECIFIC_CONSTRUCTOR_MAP
{ NULL, NULL }
};
diff --git a/cppuhelper/source/loadsharedlibcomponentfactory.hxx b/cppuhelper/source/loadsharedlibcomponentfactory.hxx
index 9809c558cc09..9119674f9af6 100644
--- a/cppuhelper/source/loadsharedlibcomponentfactory.hxx
+++ b/cppuhelper/source/loadsharedlibcomponentfactory.hxx
@@ -14,18 +14,29 @@
#include <com/sun/star/uno/Reference.hxx>
+#include <servicemanager.hxx>
+
namespace com { namespace sun { namespace star {
namespace lang { class XMultiServiceFactory; }
- namespace uno { class XInterface; }
+ namespace uno {
+ class Environment;
+ class XInterface;
+ }
} } }
namespace rtl { class OUString; }
namespace cppuhelper { namespace detail {
-css::uno::Reference<css::uno::XInterface> loadSharedLibComponentFactory(
+css::uno::Environment getEnvironment(
+ rtl::OUString const & name, rtl::OUString const & implementation);
+
+void loadSharedLibComponentFactory(
rtl::OUString const & uri, rtl::OUString const & environment,
- rtl::OUString const & prefix, rtl::OUString const & rImplName,
- css::uno::Reference<css::lang::XMultiServiceFactory> const & xMgr);
+ rtl::OUString const & prefix, rtl::OUString const & implementation,
+ rtl::OUString const & constructor,
+ css::uno::Reference<css::lang::XMultiServiceFactory> const & serviceManager,
+ ImplementationConstructorFn ** constructorFunction,
+ css::uno::Reference<css::uno::XInterface> * factory);
} }
diff --git a/cppuhelper/source/servicemanager.cxx b/cppuhelper/source/servicemanager.cxx
index 3420233cc743..9a271d2e383a 100644
--- a/cppuhelper/source/servicemanager.cxx
+++ b/cppuhelper/source/servicemanager.cxx
@@ -40,6 +40,7 @@
#include "rtl/ustring.hxx"
#include "rtl/strbuf.hxx"
#include "sal/log.hxx"
+#include "uno/environment.hxx"
#include <loadsharedlibcomponentfactory.hxx>
@@ -344,18 +345,76 @@ void Parser::handleComponent() {
}
void Parser::handleImplementation() {
- OUString name(getNameAttribute());
+ rtl::OUString attrName;
+ rtl::OUString attrConstructor;
+ xmlreader::Span name;
+ int nsId;
+ while (reader_.nextAttribute(&nsId, &name)) {
+ if (nsId == xmlreader::XmlReader::NAMESPACE_NONE
+ && name.equals(RTL_CONSTASCII_STRINGPARAM("name")))
+ {
+ if (!attrName.isEmpty()) {
+ throw css::registry::InvalidRegistryException(
+ (reader_.getUrl()
+ + ": <implementation> has multiple \"name\" attributes"),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ attrName = reader_.getAttributeValue(false).convertFromUtf8();
+ if (attrName.isEmpty()) {
+ throw css::registry::InvalidRegistryException(
+ (reader_.getUrl()
+ + ": <implementation> has empty \"name\" attribute"),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ } else if (nsId == xmlreader::XmlReader::NAMESPACE_NONE
+ && name.equals(RTL_CONSTASCII_STRINGPARAM("constructor")))
+ {
+ if (!attrConstructor.isEmpty()) {
+ throw css::registry::InvalidRegistryException(
+ (reader_.getUrl()
+ + (": <implementation> has multiple \"constructor\""
+ " attributes")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ attrConstructor = reader_.getAttributeValue(false)
+ .convertFromUtf8();
+ if (attrConstructor.isEmpty()) {
+ throw css::registry::InvalidRegistryException(
+ (reader_.getUrl()
+ + ": element has empty \"constructor\" attribute"),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ if (attrEnvironment_.isEmpty()) {
+ throw css::registry::InvalidRegistryException(
+ (reader_.getUrl()
+ + (": <implementation> has \"constructor\" attribute but"
+ " <component> has no \"environment\" attribute")),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ } else {
+ throw css::registry::InvalidRegistryException(
+ (reader_.getUrl() + ": unexpected element attribute \""
+ + name.convertFromUtf8() + "\" in <implementation>"),
+ css::uno::Reference< css::uno::XInterface >());
+ }
+ }
+ if (attrName.isEmpty()) {
+ throw css::registry::InvalidRegistryException(
+ (reader_.getUrl()
+ + ": <implementation> is missing \"name\" attribute"),
+ css::uno::Reference< css::uno::XInterface >());
+ }
implementation_.reset(
new cppuhelper::ServiceManager::Data::Implementation(
- name, attrLoader_, attrUri_, attrEnvironment_, attrPrefix_,
- alienContext_, reader_.getUrl()));
+ attrName, attrLoader_, attrUri_, attrEnvironment_, attrConstructor,
+ attrPrefix_, alienContext_, reader_.getUrl()));
if (!data_->namedImplementations.insert(
cppuhelper::ServiceManager::Data::NamedImplementations::value_type(
- name, implementation_)).
+ attrName, implementation_)).
second)
{
throw css::registry::InvalidRegistryException(
- (reader_.getUrl() + ": duplicate <implementation name=\"" + name
+ (reader_.getUrl() + ": duplicate <implementation name=\"" + attrName
+ "\">"),
css::uno::Reference< css::uno::XInterface >());
}
@@ -471,7 +530,7 @@ public:
boost::shared_ptr<
cppuhelper::ServiceManager::Data::ImplementationInfo > const &
info):
- manager_(manager), info_(info), loaded_(false)
+ manager_(manager), info_(info), loaded_(false), constructor_(0)
{ assert(manager.is() && info.get() != 0); }
private:
@@ -514,6 +573,7 @@ private:
osl::Mutex mutex_;
bool loaded_;
+ cppuhelper::ImplementationConstructorFn * constructor_;
css::uno::Reference< css::lang::XSingleComponentFactory > factory1_;
css::uno::Reference< css::lang::XSingleServiceFactory > factory2_;
};
@@ -524,7 +584,12 @@ FactoryWrapper::createInstanceWithContext(
throw (css::uno::Exception, css::uno::RuntimeException)
{
loadImplementation(Context);
- return factory1_.is()
+ return constructor_ != 0
+ ? css::uno::Reference<css::uno::XInterface>(
+ (*constructor_)(
+ Context.get(), css::uno::Sequence<css::uno::Any>().get()),
+ SAL_NO_ACQUIRE)
+ : factory1_.is()
? factory1_->createInstanceWithContext(Context)
: factory2_->createInstance();
}
@@ -536,7 +601,10 @@ FactoryWrapper::createInstanceWithArgumentsAndContext(
throw (css::uno::Exception, css::uno::RuntimeException)
{
loadImplementation(Context);
- return factory1_.is()
+ return constructor_ != 0
+ ? css::uno::Reference<css::uno::XInterface>(
+ (*constructor_)(Context.get(), Arguments.get()), SAL_NO_ACQUIRE)
+ : factory1_.is()
? factory1_->createInstanceWithArgumentsAndContext(Arguments, Context)
: factory2_->createInstanceWithArguments(Arguments);
}
@@ -544,10 +612,7 @@ FactoryWrapper::createInstanceWithArgumentsAndContext(
css::uno::Reference< css::uno::XInterface > FactoryWrapper::createInstance()
throw (css::uno::Exception, css::uno::RuntimeException)
{
- loadImplementation(manager_->getContext());
- return factory1_.is()
- ? factory1_->createInstanceWithContext(manager_->getContext())
- : factory2_->createInstance();
+ return createInstanceWithContext(manager_->getContext());
}
css::uno::Reference< css::uno::XInterface >
@@ -555,11 +620,8 @@ FactoryWrapper::createInstanceWithArguments(
css::uno::Sequence< css::uno::Any > const & Arguments)
throw (css::uno::Exception, css::uno::RuntimeException)
{
- loadImplementation(manager_->getContext());
- return factory1_.is()
- ? factory1_->createInstanceWithArgumentsAndContext(
- Arguments, manager_->getContext())
- : factory2_->createInstanceWithArguments(Arguments);
+ return createInstanceWithArgumentsAndContext(
+ Arguments, manager_->getContext());
}
rtl::OUString FactoryWrapper::getImplementationName()
@@ -603,20 +665,23 @@ void FactoryWrapper::loadImplementation(
return;
}
}
+ cppuhelper::ImplementationConstructorFn * ctor = 0;
css::uno::Reference< css::lang::XSingleComponentFactory > f1;
css::uno::Reference< css::lang::XSingleServiceFactory > f2;
//TODO: There is a race here, as the relevant service factory can already
// have been removed and loading can thus fail, as the entity from which to
// load can disappear once the service factory is removed:
- manager_->loadImplementation(context, info_, &f1, &f2);
- if (!(f1.is() || f2.is())) {
+ manager_->loadImplementation(context, info_, &ctor, &f1, &f2);
+ if (ctor == 0 && !f1.is() && !f2.is()) {
throw css::uno::DeploymentException(
- "Implementation " + info_->name + " does not provide a factory",
+ ("Implementation " + info_->name
+ + " does not provide a constructor or factory"),
static_cast< cppu::OWeakObject * >(this));
}
osl::MutexGuard g(mutex_);
if (!loaded_) {
loaded_ = true;
+ constructor_ = ctor;
factory1_ = f1;
factory2_ = f2;
}
@@ -647,11 +712,13 @@ void cppuhelper::ServiceManager::addSingletonContextEntries(
void cppuhelper::ServiceManager::loadImplementation(
css::uno::Reference< css::uno::XComponentContext > const & context,
boost::shared_ptr< Data::ImplementationInfo > const & info,
+ ImplementationConstructorFn ** constructor,
css::uno::Reference< css::lang::XSingleComponentFactory > * factory1,
css::uno::Reference< css::lang::XSingleServiceFactory > * factory2)
{
assert(
- info.get() != 0 && factory1 != 0 && !factory1->is() && factory2 != 0
+ info.get() != 0 && constructor != 0 && *constructor == 0
+ && factory1 != 0 && !factory1->is() && factory2 != 0
&& !factory2->is());
rtl::OUString uri;
try {
@@ -662,13 +729,29 @@ void cppuhelper::ServiceManager::loadImplementation(
static_cast< cppu::OWeakObject * >(this));
}
css::uno::Reference< css::uno::XInterface > f0;
- // Shortcut loading via SharedLibrary loader, to pass in environment and
- // prefix arguments:
+ // Special handling of SharedLibrary loader, with support for environment,
+ // constructor, and prefix arguments:
if (!info->alienContext.is()
&& info->loader == "com.sun.star.loader.SharedLibrary")
{
- f0 = cppuhelper::detail::loadSharedLibComponentFactory(
- uri, info->environment, info->prefix, info->name, this);
+ cppuhelper::detail::loadSharedLibComponentFactory(
+ uri, info->environment, info->prefix, info->name, info->constructor,
+ this, constructor, &f0);
+ if (constructor != 0 && *constructor != 0) {
+ assert(!info->environment.isEmpty());
+ css::uno::Environment curEnv(css::uno::Environment::getCurrent());
+ css::uno::Environment env(
+ cppuhelper::detail::getEnvironment(
+ info->environment, info->name));
+ if (!(curEnv.is() && env.is())) {
+ throw css::uno::DeploymentException(
+ "cannot get environments",
+ css::uno::Reference<css::uno::XInterface>());
+ }
+ if (curEnv.get() != env.get()) {
+ std::abort();//TODO
+ }
+ }
} else {
SAL_WARN_IF(
!info->environment.isEmpty(), "cppuhelper",
@@ -676,6 +759,10 @@ void cppuhelper::ServiceManager::loadImplementation(
<< info->environment);
SAL_WARN_IF(
!info->prefix.isEmpty(), "cppuhelper",
+ "Loader " << info->loader << " and non-empty constructor "
+ << info->constructor);
+ SAL_WARN_IF(
+ !info->prefix.isEmpty(), "cppuhelper",
"Loader " << info->loader << " and non-empty prefix "
<< info->prefix);
css::uno::Reference< css::uno::XComponentContext > ctxt;
@@ -810,7 +897,12 @@ cppuhelper::ServiceManager::createInstanceWithContext(
if (impl.get() == 0) {
return css::uno::Reference< css::uno::XInterface >();
}
- if (impl->factory1.is()) {
+ if (impl->constructor != 0) {
+ return css::uno::Reference<css::uno::XInterface>(
+ (*impl->constructor)(
+ Context.get(), css::uno::Sequence<css::uno::Any>().get()),
+ SAL_NO_ACQUIRE);
+ } else if (impl->factory1.is()) {
return impl->factory1->createInstanceWithContext(Context);
}
if (impl->factory2.is()) {
@@ -833,7 +925,11 @@ cppuhelper::ServiceManager::createInstanceWithArgumentsAndContext(
if (impl.get() == 0) {
return css::uno::Reference< css::uno::XInterface >();
}
- if (impl->factory1.is()) {
+ if (impl->constructor != 0) {
+ return css::uno::Reference<css::uno::XInterface>(
+ (*impl->constructor)(Context.get(), Arguments.get()),
+ SAL_NO_ACQUIRE);
+ } else if (impl->factory1.is()) {
return impl->factory1->createInstanceWithArgumentsAndContext(
Arguments, Context);
}
@@ -1309,7 +1405,7 @@ bool cppuhelper::ServiceManager::readLegacyRdbFile(rtl::OUString const & uri) {
boost::shared_ptr< Data::Implementation > impl(
new Data::Implementation(
name, readLegacyRdbString(uri, implKey, "UNO/ACTIVATOR"),
- readLegacyRdbString(uri, implKey, "UNO/LOCATION"), "", "",
+ readLegacyRdbString(uri, implKey, "UNO/LOCATION"), "", "", "",
css::uno::Reference< css::uno::XComponentContext >(), uri));
if (!data_.namedImplementations.insert(
Data::NamedImplementations::value_type(name, impl)).
@@ -1679,12 +1775,14 @@ cppuhelper::ServiceManager::findServiceImplementation(
// while the mutex is unlocked and loading can thus fail, as the entity from
// which to load can disappear once the service factory is removed.
if (!loaded) {
+ cppuhelper::ImplementationConstructorFn * ctor = 0;
css::uno::Reference< css::lang::XSingleComponentFactory > f1;
css::uno::Reference< css::lang::XSingleServiceFactory > f2;
- loadImplementation(context, impl->info, &f1, &f2);
+ loadImplementation(context, impl->info, &ctor, &f1, &f2);
osl::MutexGuard g(rBHelper.rMutex);
if (!(isDisposed() || impl->loaded)) {
impl->loaded = true;
+ impl->constructor = ctor;
impl->factory1 = f1;
impl->factory2 = f2;
}
diff --git a/cppuhelper/source/servicemanager.hxx b/cppuhelper/source/servicemanager.hxx
index b68cd4b95edd..d76b93f9a4f6 100644
--- a/cppuhelper/source/servicemanager.hxx
+++ b/cppuhelper/source/servicemanager.hxx
@@ -34,10 +34,20 @@
#include "registry/registry.hxx"
#include "rtl/ustring.hxx"
+namespace com { namespace sun { namespace star { namespace lang {
+ class XSingleComponentFactory;
+} } } }
namespace cppu { struct ContextEntry_Init; }
namespace cppuhelper {
+extern "C" {
+
+typedef css::uno::XInterface * SAL_CALL ImplementationConstructorFn(
+ css::uno::XComponentContext *, uno_Sequence *);
+
+}
+
typedef cppu::WeakComponentImplHelper8<
css::lang::XServiceInfo, css::lang::XMultiServiceFactory,
css::lang::XMultiComponentFactory, css::container::XSet,
@@ -55,13 +65,15 @@ public:
rtl::OUString const & theName, rtl::OUString const & theLoader,
rtl::OUString const & theUri,
rtl::OUString const & theEnvironment,
+ rtl::OUString const & theConstructor,
rtl::OUString const & thePrefix,
css::uno::Reference< css::uno::XComponentContext > const &
theAlienContext,
rtl::OUString const & theRdbFile):
name(theName), loader(theLoader), uri(theUri),
- environment(theEnvironment), prefix(thePrefix),
- alienContext(theAlienContext), rdbFile(theRdbFile)
+ environment(theEnvironment), constructor(theConstructor),
+ prefix(thePrefix), alienContext(theAlienContext),
+ rdbFile(theRdbFile)
{}
explicit ImplementationInfo(rtl::OUString const & theName):
@@ -71,6 +83,7 @@ public:
rtl::OUString const loader;
rtl::OUString const uri;
rtl::OUString const environment;
+ rtl::OUString const constructor;
rtl::OUString const prefix;
css::uno::Reference< css::uno::XComponentContext > const
alienContext;
@@ -83,15 +96,16 @@ public:
Implementation(
rtl::OUString const & name, rtl::OUString const & loader,
rtl::OUString const & uri, rtl::OUString const & environment,
+ rtl::OUString const & constructorName,
rtl::OUString const & prefix,
css::uno::Reference< css::uno::XComponentContext > const &
alienContext,
rtl::OUString const & rdbFile):
info(
new ImplementationInfo(
- name, loader, uri, environment, prefix, alienContext,
- rdbFile)),
- loaded(false)
+ name, loader, uri, environment, constructorName, prefix,
+ alienContext, rdbFile)),
+ constructor(0), loaded(false)
{}
Implementation(
@@ -102,11 +116,13 @@ public:
theFactory2,
css::uno::Reference< css::lang::XComponent > const &
theComponent):
- info(new ImplementationInfo(name)), factory1(theFactory1),
- factory2(theFactory2), component(theComponent), loaded(true)
+ info(new ImplementationInfo(name)), constructor(0),
+ factory1(theFactory1), factory2(theFactory2),
+ component(theComponent), loaded(true)
{}
boost::shared_ptr< ImplementationInfo > info;
+ ImplementationConstructorFn * constructor;
css::uno::Reference< css::lang::XSingleComponentFactory > factory1;
css::uno::Reference< css::lang::XSingleServiceFactory > factory2;
css::uno::Reference< css::lang::XComponent > component;
@@ -160,6 +176,7 @@ public:
void loadImplementation(
css::uno::Reference< css::uno::XComponentContext > const & context,
boost::shared_ptr< Data::ImplementationInfo > const & info,
+ ImplementationConstructorFn ** constructor,
css::uno::Reference< css::lang::XSingleComponentFactory > * factory1,
css::uno::Reference< css::lang::XSingleServiceFactory > * factory2);
diff --git a/cppuhelper/source/shlib.cxx b/cppuhelper/source/shlib.cxx
index 81e02d3eb1ac..972357b3c05c 100644
--- a/cppuhelper/source/shlib.cxx
+++ b/cppuhelper/source/shlib.cxx
@@ -17,456 +17,333 @@
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
-#include "sal/config.h"
+#include <sal/config.h>
#include <cassert>
+#include <cstdlib>
-#include "osl/module.hxx"
-#include "uno/environment.h"
-#include <uno/lbnames.h>
-#include "uno/mapping.hxx"
-#include "cppuhelper/factory.hxx"
-#include "cppuhelper/shlib.hxx"
-
-#include "com/sun/star/beans/XPropertySet.hpp"
+#include <com/sun/star/loader/CannotActivateFactoryException.hpp>
+#include <cppuhelper/factory.hxx>
+#include <cppuhelper/shlib.hxx>
+#include <osl/module.hxx>
+#include <uno/environment.hxx>
+#include <uno/mapping.hxx>
#include <loadsharedlibcomponentfactory.hxx>
-#include <stdio.h>
-
-#ifdef ANDROID
+#if defined ANDROID
#include <osl/detail/android-bootstrap.h>
-#endif
-
-#ifdef IOS
+#elif defined IOS
#include <osl/detail/component-mapping.h>
#endif
-using namespace ::osl;
-using namespace ::com::sun::star;
-using namespace ::com::sun::star::uno;
-
-using rtl::OString;
-using rtl::OUString;
-
-namespace {
-
-uno::Environment getEnvironment(
- OUString const & name, OUString const & cImplName)
+css::uno::Environment cppuhelper::detail::getEnvironment(
+ rtl::OUString const & name, rtl::OUString const & implementation)
{
- OUString n(name);
- static const char * pUNO_ENV_LOG = ::getenv( "UNO_ENV_LOG" );
- if (pUNO_ENV_LOG && rtl_str_getLength(pUNO_ENV_LOG) )
- {
- OString implName(OUStringToOString(cImplName, RTL_TEXTENCODING_ASCII_US));
- OString aEnv( pUNO_ENV_LOG );
- sal_Int32 nIndex = 0;
- do
- {
- const OString aStr( aEnv.getToken( 0, ';', nIndex ) );
- if ( aStr.equals(implName) )
- {
- n += ::rtl::OUString(":log");
+ assert(!implementation.isEmpty());
+ rtl::OUString n(name);
+ static char const * log = std::getenv("UNO_ENV_LOG");
+ if (log != 0 && *log != 0) {
+ rtl::OString imps(log);
+ for (sal_Int32 i = 0; i != -1;) {
+ rtl::OString imp(imps.getToken(0, ';', i));
+ //TODO: this assumes UNO_ENV_LOG only contains ASCII characters:
+ if (implementation.equalsAsciiL(imp.getStr(), imp.getLength())) {
+ n += ":log";
break;
}
- } while( nIndex != -1 );
+ }
}
- return uno::Environment(n);
+ return css::uno::Environment(n);
}
-#ifndef DISABLE_DYNLOADING
-
-void getLibEnv(oslModule lib,
- uno::Environment * pEnv,
- uno::Environment const & cTargetEnv,
- OUString const & cImplName = OUString(),
- OUString const & rPrefix = OUString())
-{
- sal_Char const * pEnvTypeName = NULL;
+namespace {
- OUString aGetEnvNameExt = rPrefix + COMPONENT_GETENVEXT;
- component_getImplementationEnvironmentExtFunc pGetImplEnvExt =
- (component_getImplementationEnvironmentExtFunc)osl_getFunctionSymbol(lib, aGetEnvNameExt.pData);
+#if !defined DISABLE_DYNLOADING
- if (pGetImplEnvExt)
- {
- OString implName(OUStringToOString(cImplName, RTL_TEXTENCODING_ASCII_US));
- pGetImplEnvExt(&pEnvTypeName, (uno_Environment **)pEnv, implName.getStr(), cTargetEnv.get());
+css::uno::Environment getEnvironmentFromModule(
+ osl::Module const & module, css::uno::Environment const & target,
+ rtl::OUString const & implementation, rtl::OUString const & prefix)
+{
+ char const * name = 0;
+ css::uno::Environment env;
+ rtl::OUString fullPrefix(prefix);
+ if (!fullPrefix.isEmpty()) {
+ fullPrefix += "_";
}
- else
- {
- OUString aGetEnvName = rPrefix + COMPONENT_GETENV;
- component_getImplementationEnvironmentFunc pGetImplEnv =
- (component_getImplementationEnvironmentFunc)osl_getFunctionSymbol(
- lib, aGetEnvName.pData );
- if (pGetImplEnv)
- pGetImplEnv(&pEnvTypeName, (uno_Environment **)pEnv);
-
- else // this symbol used to be mandatory, but is no longer
- pEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
+ component_getImplementationEnvironmentExtFunc fp1
+ = reinterpret_cast<component_getImplementationEnvironmentExtFunc>(
+ module.getFunctionSymbol(fullPrefix + COMPONENT_GETENVEXT));
+ if (fp1 != 0) {
+ (*fp1)(
+ &name, reinterpret_cast<uno_Environment **>(&env),
+ (rtl::OUStringToOString(implementation, RTL_TEXTENCODING_ASCII_US)
+ .getStr()),
+ target.get());
+ } else {
+ component_getImplementationEnvironmentFunc fp2
+ = reinterpret_cast<component_getImplementationEnvironmentFunc>(
+ module.getFunctionSymbol(fullPrefix + COMPONENT_GETENV));
+ if (fp2 != 0) {
+ (*fp2)(&name, reinterpret_cast<uno_Environment **>(&env));
+ } else {
+ name = CPPU_CURRENT_LANGUAGE_BINDING_NAME; //TODO: fail
+ }
}
-
- if (!pEnv->is() && pEnvTypeName)
- {
- *pEnv = getEnvironment(
- OUString::createFromAscii(pEnvTypeName), cImplName);
+ if (!env.is() && name != 0) {
+ env = cppuhelper::detail::getEnvironment(
+ rtl::OUString::createFromAscii(name), implementation);
}
+ return env;
}
#endif
-extern "C" void s_getFactory(va_list * pParam)
-{
- component_getFactoryFunc pSym = va_arg(*pParam, component_getFactoryFunc);
- OString const * pImplName = va_arg(*pParam, OString const *);
- void * pSMgr = va_arg(*pParam, void *);
- void * pKey = va_arg(*pParam, void *);
- void ** ppSSF = va_arg(*pParam, void **);
-
- *ppSSF = pSym(pImplName->getStr(), pSMgr, pKey);
+extern "C" void getFactory(va_list * args) {
+ component_getFactoryFunc fn = va_arg(*args, component_getFactoryFunc);
+ rtl::OString const * implementation = va_arg(*args, rtl::OString const *);
+ void * smgr = va_arg(*args, void *);
+ void * key = va_arg(*args, void *);
+ void ** factory = va_arg(*args, void **);
+ *factory = (*fn)(implementation->getStr(), smgr, key);
}
-}
-
-namespace cppu
-{
-
-/* For backwards compatibility */
-Reference< XInterface > SAL_CALL loadSharedLibComponentFactory(
- OUString const & uri, OUString const & rPath, OUString const & rImplName,
- Reference< lang::XMultiServiceFactory > const & xMgr,
- Reference< registry::XRegistryKey > const & xKey )
- SAL_THROW( (loader::CannotActivateFactoryException) )
+css::uno::Reference<css::uno::XInterface> invokeComponentFactory(
+ css::uno::Environment const & source, css::uno::Environment const & target,
+ component_getFactoryFunc function, rtl::OUString const & uri,
+ rtl::OUString const & implementation,
+ css::uno::Reference<css::lang::XMultiServiceFactory> const & serviceManager)
{
- assert(rPath.isEmpty());
- assert(!xKey.is());
- (void) rPath;
- (void) xKey;
- return cppuhelper::detail::loadSharedLibComponentFactory(
- uri, "", "", rImplName, xMgr);
+ if (!(source.is() && target.is())) {
+ throw css::loader::CannotActivateFactoryException(
+ "cannot get environments",
+ css::uno::Reference<css::uno::XInterface>());
+ }
+ rtl::OString impl(
+ rtl::OUStringToOString(implementation, RTL_TEXTENCODING_ASCII_US));
+ if (source.get() == target.get()) {
+ return css::uno::Reference<css::uno::XInterface>(
+ static_cast<css::uno::XInterface *>(
+ (*function)(impl.getStr(), serviceManager.get(), 0)),
+ SAL_NO_ACQUIRE);
+ } else {
+ css::uno::Mapping mapTo(source, target);
+ css::uno::Mapping mapFrom(target, source);
+ if (!(mapTo.is() && mapFrom.is())) {
+ throw css::loader::CannotActivateFactoryException(
+ "cannot get mappings",
+ css::uno::Reference<css::uno::XInterface>());
+ }
+ void * smgr = mapTo.mapInterface(
+ serviceManager.get(),
+ cppu::UnoType<css::lang::XMultiServiceFactory>::get());
+ void * factory = 0;
+ target.invoke(getFactory, function, &impl, smgr, 0, &factory);
+ if (smgr != 0) {
+ (*target.get()->pExtEnv->releaseInterface)(
+ target.get()->pExtEnv, smgr);
+ }
+ if (factory == 0) {
+ throw css::loader::CannotActivateFactoryException(
+ ("calling factory function for \"" + implementation + "\" in <"
+ + uri + "> returned null"),
+ css::uno::Reference<css::uno::XInterface>());
+ }
+ css::uno::Reference<css::uno::XInterface> res;
+ mapFrom.mapInterface(
+ reinterpret_cast<void **>(&res), factory,
+ cppu::UnoType<css::uno::XInterface>::get());
+ (*target.get()->pExtEnv->releaseInterface)(
+ target.get()->pExtEnv, factory);
+ return res;
+ }
}
}
-namespace
+void cppuhelper::detail::loadSharedLibComponentFactory(
+ rtl::OUString const & uri, rtl::OUString const & environment,
+ rtl::OUString const & prefix, rtl::OUString const & implementation,
+ rtl::OUString const & constructor,
+ css::uno::Reference<css::lang::XMultiServiceFactory> const & serviceManager,
+ ImplementationConstructorFn ** constructorFunction,
+ css::uno::Reference<css::uno::XInterface> * factory)
{
-
-Reference< XInterface > invokeComponentFactory(
- uno::Environment const & env,
- oslGenericFunction pGetter,
- OUString const & rModulePath,
- OUString const & rImplName,
- Reference< ::com::sun::star::lang::XMultiServiceFactory > const & xMgr,
- OUString &rExcMsg )
-{
- Reference< XInterface > xRet;
- uno::Environment currentEnv(Environment::getCurrent());
-
- OString aImplName(
- OUStringToOString( rImplName, RTL_TEXTENCODING_ASCII_US ) );
-
- if (env.is() && currentEnv.is())
- {
-#if OSL_DEBUG_LEVEL > 1
- {
- rtl::OString modPath(rtl::OUStringToOString(rModulePath, RTL_TEXTENCODING_ASCII_US));
- rtl::OString implName(rtl::OUStringToOString(rImplName, RTL_TEXTENCODING_ASCII_US));
- rtl::OString envDcp(rtl::OUStringToOString(env.getTypeName(), RTL_TEXTENCODING_ASCII_US));
-
- fprintf(stderr, "invokeComponentFactory envDcp:%s implName:%s modPath:%s\n", envDcp.getStr(), implName.getStr(), modPath.getStr());
+ assert(constructor.isEmpty() || !environment.isEmpty());
+ assert(
+ (constructorFunction == 0 && constructor.isEmpty())
+ || *constructorFunction == 0);
+ assert(factory != 0 && !factory->is());
+#if defined DISABLE_DYNLOADING
+ assert(!environment.isEmpty());
+ if (constructor.isEmpty()) {
+ css::uno::Environment curEnv(css::uno::Environment::getCurrent());
+ css::uno::Environment env(getEnvironment(environment, implementation));
+ if (!(curEnv.is() && env.is())) {
+ throw css::loader::CannotActivateFactoryException(
+ "cannot get environments",
+ css::uno::Reference<css::uno::XInterface>());
}
-#endif
- if (env.get() == currentEnv.get())
- {
- xRet.set(
- static_cast<css::uno::XInterface *>(
- (*reinterpret_cast<component_getFactoryFunc>(pGetter))(
- aImplName.getStr(), xMgr.get(), 0)),
- SAL_NO_ACQUIRE);
+ if (curEnv.get() != env.get()) {
+ std::abort();//TODO
}
- else
- {
- Mapping aCurrent2Env( currentEnv, env );
- Mapping aEnv2Current( env, currentEnv );
-
- if (aCurrent2Env.is() && aEnv2Current.is())
- {
- void * pSMgr = aCurrent2Env.mapInterface(
- xMgr.get(), ::getCppuType( &xMgr ) );
-
- void * pSSF = NULL;
-
- env.invoke(s_getFactory, pGetter, &aImplName, pSMgr, 0, &pSSF);
-
- if (pSMgr)
- {
- (*env.get()->pExtEnv->releaseInterface)(
- env.get()->pExtEnv, pSMgr );
- }
-
- if (pSSF)
- {
- aEnv2Current.mapInterface(
- reinterpret_cast< void ** >( &xRet ),
- pSSF, ::getCppuType( &xRet ) );
- (env.get()->pExtEnv->releaseInterface)(
- env.get()->pExtEnv, pSSF );
- }
- else
- {
- rExcMsg = rModulePath +
- ": cannot get factory of " +
- "demanded implementation: " +
- OStringToOUString(
- aImplName, RTL_TEXTENCODING_ASCII_US );
- }
+ rtl::OUString name(prefix == "direct" ? implementation : uri);
+ lib_to_factory_mapping const * map = lo_get_factory_map();
+ component_getFactoryFunc fp;
+ for (int i = 0; map[i].name != 0; ++i) {
+ if (name.equalsAscii(map[i].name)) {
+ fp = map[i].component_getFactory_function;
+ break;
}
- else
- {
- rExcMsg =
- "cannot get uno mappings: C++ <=> UNO!";
+ }
+ if (fp == 0) {
+ throw css::loader::CannotActivateFactoryException(
+ "unknown factory name \"" + name + "\"",
+ css::uno::Reference<css::uno::XInterface>());
+ }
+ *factory = invokeComponentFactory(
+ css::uno::Environment::getCurrent(),
+ getEnvironment(environment, implementation), fp, uri,
+ implementation, serviceManager);
+ } else {
+ lib_to_constructor_mapping const * map = lo_get_constructor_map();
+ for (int i = 0; map[i].name != 0; ++i) {
+ if (constructor.equalsAscii(map[i].name)) {
+ *constructorFunction
+ = reinterpret_cast<ImplementationConstructorFn *>(
+ map[i].constructor_function);
+ return;
}
}
- }
- else
- {
- rExcMsg = "cannot get uno environments!";
- }
-
- return xRet;
-}
-
-} // namespace
-
-namespace cppuhelper { namespace detail {
-
-css::uno::Reference<css::uno::XInterface> loadSharedLibComponentFactory(
- OUString const & uri, OUString const & rEnvironment,
- OUString const & rPrefix, OUString const & rImplName,
- css::uno::Reference<css::lang::XMultiServiceFactory> const & xMgr)
-{
-#ifndef DISABLE_DYNLOADING
- OUString moduleUri(uri);
- oslModule lib = osl_loadModule(
- moduleUri.pData, SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL );
- if (! lib)
- {
- OUString const msg("loading component library failed: " + moduleUri);
- SAL_WARN("cppuhelper", msg);
- throw loader::CannotActivateFactoryException(msg,
- Reference< XInterface >() );
+ throw css::loader::CannotActivateFactoryException(
+ "unknown constructor name \"" + constructor + "\"",
+ css::uno::Reference<css::uno::XInterface>());
}
#else
- oslModule lib;
- OUString moduleUri("MAIN");
- if (! osl_getModuleHandle( NULL, &lib))
- {
- throw loader::CannotActivateFactoryException(
- "osl_getModuleHandle of the executable: ",
- Reference< XInterface >() );
- }
-#endif
-
- Reference< XInterface > xRet;
-
- OUString aExcMsg;
-
- OUString aFullPrefix(rPrefix);
- if (!aFullPrefix.isEmpty()) {
- aFullPrefix += "_";
- }
- OUString aGetFactoryName = aFullPrefix + COMPONENT_GETFACTORY;
- if (rPrefix == "direct")
- aGetFactoryName = rImplName.replace('.', '_') + "_" + COMPONENT_GETFACTORY;
-
- oslGenericFunction pSym = NULL;
-
-#ifdef DISABLE_DYNLOADING
-
- OString sName;
- const lib_to_component_mapping *map = NULL;
- if (rPrefix == "direct")
- {
- sName = OUStringToOString(rImplName, RTL_TEXTENCODING_ASCII_US);
- map = lo_get_implementation_map();
- }
- else
- {
- sName = OUStringToOString(uri, RTL_TEXTENCODING_ASCII_US);
- map = lo_get_library_map();
- }
- for (int i = 0; pSym == NULL && map[i].name != NULL; ++i)
- {
- if ( sName == map[i].name )
- pSym = (oslGenericFunction) map[i].component_getFactory_function;
- }
- if ( pSym == NULL )
- {
- fprintf( stderr, "attempting to load unknown library %s\n", OUStringToOString( uri, RTL_TEXTENCODING_ASCII_US ).getStr() );
- assert( !"Attempt to load unknown library" );
+ osl::Module mod(uri, SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL);
+ if (!mod.is()) {
+ throw css::loader::CannotActivateFactoryException(
+ "loading component library <" + uri + "> failed",
+ css::uno::Reference<css::uno::XInterface>());
}
-#else
-
- if ( pSym == NULL )
- pSym = osl_getFunctionSymbol( lib, aGetFactoryName.pData );
-#endif
-
- if (pSym != 0)
- {
- uno::Environment env;
- if (rEnvironment.isEmpty()) {
-#if defined DISABLE_DYNLOADING
- //TODO: assert(false); // this cannot happen
- env = getEnvironment(CPPU_CURRENT_LANGUAGE_BINDING_NAME, rImplName);
-
-#else
- getLibEnv(
- lib, &env, Environment::getCurrent(), rImplName, aFullPrefix);
-#endif
+ if (constructor.isEmpty()) {
+ rtl::OUString sym;
+ if (prefix == "direct") {
+ sym = implementation.replace('.', '_') + "_" + COMPONENT_GETFACTORY;
+ } else if (!prefix.isEmpty()) {
+ sym = prefix + "_" + COMPONENT_GETFACTORY;
} else {
- env = getEnvironment(rEnvironment, rImplName);
+ sym = COMPONENT_GETFACTORY;
}
-
- xRet = invokeComponentFactory(
- env, pSym, moduleUri, rImplName, xMgr, aExcMsg );
- }
- else
- {
- aExcMsg = moduleUri;
- aExcMsg += ": cannot get symbol: ";
- aExcMsg += aGetFactoryName;
+ oslGenericFunction fp = mod.getFunctionSymbol(sym);
+ if (fp == 0) {
+ throw css::loader::CannotActivateFactoryException(
+ ("no factory symbol \"" + sym + "\" in component library <"
+ + uri + ">"),
+ css::uno::Reference<css::uno::XInterface>());
+ }
+ css::uno::Environment curEnv(css::uno::Environment::getCurrent());
+ *factory = invokeComponentFactory(
+ curEnv,
+ (environment.isEmpty()
+ ? getEnvironmentFromModule(mod, curEnv, implementation, prefix)
+ : getEnvironment(environment, implementation)),
+ reinterpret_cast<component_getFactoryFunc>(fp), uri, implementation,
+ serviceManager);
+ } else {
+ oslGenericFunction fp = mod.getFunctionSymbol(constructor);
+ if (fp == 0) {
+ throw css::loader::CannotActivateFactoryException(
+ ("no constructor symbol \"" + constructor
+ + "\" in component library <" + uri + ">"),
+ css::uno::Reference<css::uno::XInterface>());
+ }
+ *constructorFunction = reinterpret_cast<ImplementationConstructorFn *>(
+ fp);
}
-
- if (! xRet.is())
- {
-#ifndef DISABLE_DYNLOADING
- osl_unloadModule( lib );
+ mod.release();
#endif
- SAL_WARN("cppuhelper", "### cannot activate factory: " << aExcMsg);
- throw loader::CannotActivateFactoryException(
- aExcMsg,
- Reference< XInterface >() );
- }
- return xRet;
}
-} }
+#if !defined DISABLE_DYNLOADING
-#ifndef DISABLE_DYNLOADING
-
-//==============================================================================
-extern "C" { static void s_writeInfo(va_list * pParam)
+css::uno::Reference<css::uno::XInterface> cppu::loadSharedLibComponentFactory(
+ rtl::OUString const & uri, rtl::OUString const & rPath,
+ rtl::OUString const & rImplName,
+ css::uno::Reference<css::lang::XMultiServiceFactory> const & xMgr,
+ css::uno::Reference<css::registry::XRegistryKey> const & xKey)
+ SAL_THROW((css::loader::CannotActivateFactoryException))
{
- component_writeInfoFunc pSym = va_arg(*pParam, component_writeInfoFunc);
- void * pSMgr = va_arg(*pParam, void *);
- void * pKey = va_arg(*pParam, void *);
- sal_Bool * pbRet = va_arg(*pParam, sal_Bool *);
+ assert(rPath.isEmpty()); (void) rPath;
+ assert(!xKey.is()); (void) xKey;
+ css::uno::Reference<css::uno::XInterface> fac;
+ cppuhelper::detail::loadSharedLibComponentFactory(
+ uri, "", "", rImplName, "", xMgr, 0, &fac);
+ return fac;
+}
- *pbRet = pSym(pSMgr, pKey);
+namespace {
-}}
+extern "C" void writeInfo(va_list * args) {
+ component_writeInfoFunc fn = va_arg(*args, component_writeInfoFunc);
+ void * smgr = va_arg(*args, void *);
+ void * key = va_arg(*args, void *);
+ sal_Bool * ok = va_arg(*args, sal_Bool *);
+ *ok = (*fn)(smgr, key);
+}
-namespace cppu {
+}
-void SAL_CALL writeSharedLibComponentInfo(
- OUString const & uri, OUString const & rPath,
- Reference< lang::XMultiServiceFactory > const & xMgr,
- Reference< registry::XRegistryKey > const & xKey )
- SAL_THROW( (registry::CannotRegisterImplementationException) )
+void cppu::writeSharedLibComponentInfo(
+ rtl::OUString const & uri, rtl::OUString const & rPath,
+ css::uno::Reference<css::lang::XMultiServiceFactory> const & xMgr,
+ css::uno::Reference<css::registry::XRegistryKey> const & xKey)
+ SAL_THROW((css::registry::CannotRegisterImplementationException))
{
- (void) rPath;
- assert(rPath.isEmpty());
- oslModule lib = osl_loadModule(
- uri.pData, SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL );
- if (! lib)
- {
- OUString const msg("loading component library failed: " + uri);
- SAL_WARN("cppuhelper", msg);
- throw registry::CannotRegisterImplementationException(msg,
- Reference< XInterface >() );
+ assert(rPath.isEmpty()); (void) rPath;
+ osl::Module mod(uri, SAL_LOADMODULE_LAZY | SAL_LOADMODULE_GLOBAL);
+ if (!mod.is()) {
+ throw css::registry::CannotRegisterImplementationException(
+ "loading component library <" + uri + "> failed",
+ css::uno::Reference<css::uno::XInterface>());
}
-
- sal_Bool bRet = sal_False;
-
- uno::Environment currentEnv(Environment::getCurrent());
- uno::Environment env;
-
- OUString aExcMsg;
-
- getLibEnv(lib, &env, currentEnv);
-
- OUString aWriteInfoName = COMPONENT_WRITEINFO;
- oslGenericFunction pSym = osl_getFunctionSymbol( lib, aWriteInfoName.pData );
- if (pSym != 0)
- {
- if (env.is() && currentEnv.is())
- {
- Mapping aCurrent2Env( currentEnv, env );
- if (aCurrent2Env.is())
- {
- void * pSMgr = aCurrent2Env.mapInterface(
- xMgr.get(), ::getCppuType( &xMgr ) );
- void * pKey = aCurrent2Env.mapInterface(
- xKey.get(), ::getCppuType( &xKey ) );
- if (pKey)
- {
- env.invoke(s_writeInfo, pSym, pSMgr, pKey, &bRet);
-
-
- (*env.get()->pExtEnv->releaseInterface)(
- env.get()->pExtEnv, pKey );
- if (! bRet)
- {
- aExcMsg = uri;
- aExcMsg += ": component_writeInfo() "
- "returned false!";
- }
- }
- else
- {
- // key is mandatory
- aExcMsg = uri;
- aExcMsg += ": registry is mandatory to invoke"
- " component_writeInfo()!";
- }
-
- if (pSMgr)
- {
- (*env.get()->pExtEnv->releaseInterface)(
- env.get()->pExtEnv, pSMgr );
- }
- }
- else
- {
- aExcMsg = "cannot get uno mapping: C++ <=> UNO!";
- }
- }
- else
- {
- aExcMsg = "cannot get uno environments!";
- }
+ oslGenericFunction fp = mod.getFunctionSymbol(COMPONENT_WRITEINFO);
+ if (fp == 0) {
+ throw css::registry::CannotRegisterImplementationException(
+ ("no symbol \"" COMPONENT_WRITEINFO "\" in component library <"
+ + uri + ">"),
+ css::uno::Reference<css::uno::XInterface>());
}
- else
- {
- aExcMsg = uri;
- aExcMsg += ": cannot get symbol: ";
- aExcMsg += aWriteInfoName;
+ css::uno::Environment curEnv(css::uno::Environment::getCurrent());
+ css::uno::Environment env(getEnvironmentFromModule(mod, curEnv, "", ""));
+ if (!(curEnv.is() && env.is())) {
+ throw css::registry::CannotRegisterImplementationException(
+ "cannot get environments",
+ css::uno::Reference<css::uno::XInterface>());
}
-
-//!
-//! OK: please look at #88219#
-//!
-//! ::osl_unloadModule( lib);
- if (! bRet)
- {
- SAL_WARN("cppuhelper", "### cannot write component info: " << aExcMsg);
- throw registry::CannotRegisterImplementationException(
- aExcMsg, Reference< XInterface >() );
+ css::uno::Mapping map(curEnv, env);
+ if (!map.is()) {
+ throw css::registry::CannotRegisterImplementationException(
+ "cannot get mapping", css::uno::Reference<css::uno::XInterface>());
+ }
+ void * smgr = map.mapInterface(
+ xMgr.get(), cppu::UnoType<css::lang::XMultiServiceFactory>::get());
+ void * key = map.mapInterface(
+ xKey.get(), cppu::UnoType<css::registry::XRegistryKey>::get());
+ sal_Bool ok;
+ env.invoke(writeInfo, fp, smgr, key, &ok);
+ (*env.get()->pExtEnv->releaseInterface)(env.get()->pExtEnv, key);
+ if (smgr != 0) {
+ (*env.get()->pExtEnv->releaseInterface)(env.get()->pExtEnv, smgr);
+ }
+ if (!ok) {
+ throw css::registry::CannotRegisterImplementationException(
+ ("calling \"" COMPONENT_WRITEINFO "\" in component library <" + uri
+ + "> returned false"),
+ css::uno::Reference<css::uno::XInterface>());
}
}
-}
-
-#endif // DISABLE_DYNLOADING
+#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/include/osl/detail/component-mapping.h b/include/osl/detail/component-mapping.h
index 9feae7000160..df00726a4e52 100644
--- a/include/osl/detail/component-mapping.h
+++ b/include/osl/detail/component-mapping.h
@@ -29,16 +29,21 @@ extern "C" {
typedef struct {
const char *name;
void * (*component_getFactory_function)(const char *, void *, void *);
-} lib_to_component_mapping;
+} lib_to_factory_mapping;
-const lib_to_component_mapping *lo_get_library_map(void);
-const lib_to_component_mapping *lo_get_implementation_map(void);
+typedef struct {
+ const char *name;
+ void * (*constructor_function)(void *, void *);
+} lib_to_constructor_mapping;
+
+const lib_to_factory_mapping *lo_get_factory_map(void);
+const lib_to_constructor_mapping *lo_get_constructor_map(void);
#ifdef __cplusplus
}
#endif
-#define NON_APP_SPECIFIC_COMPONENT_MAP \
+#define NON_APP_SPECIFIC_FACTORY_MAP \
{ "libintrospectionlo.a", introspection_component_getFactory }, \
{ "libreflectionlo.a", reflection_component_getFactory }, \
{ "libstocserviceslo.a", stocservices_component_getFactory }, \
@@ -60,19 +65,19 @@ const lib_to_component_mapping *lo_get_implementation_map(void);
{ "libvcllo.a", vcl_component_getFactory }, \
{ "libxstor.a", xstor_component_getFactory }, \
-#define NON_APP_SPECIFIC_DIRECT_COMPONENT_MAP \
- { "com.sun.star.comp.extensions.xml.sax.ParserExpat", com_sun_star_comp_extensions_xml_sax_ParserExpat_component_getFactory }, \
- { "com.sun.star.comp.extensions.xml.sax.FastParser", com_sun_star_comp_extensions_xml_sax_FastParser_component_getFactory }, \
- { "com.sun.star.comp.stoc.DLLComponentLoader.component.getFactory", com_sun_star_comp_stoc_DLLComponentLoader_component_getFactory }, \
- { "com.sun.star.comp.stoc.ImplementationRegistration.component.getFactory", com_sun_star_comp_stoc_ImplementationRegistration_component_getFactory }, \
- { "com.sun.star.comp.stoc.NestedRegistry.component.getFactory", com_sun_star_comp_stoc_NestedRegistry_component_getFactory }, \
- { "com.sun.star.comp.stoc.ORegistryServiceManager.component.getFactory", com_sun_star_comp_stoc_ORegistryServiceManager_component_getFactory }, \
- { "com.sun.star.comp.stoc.OServiceManager.component.getFactory", com_sun_star_comp_stoc_OServiceManager_component_getFactory }, \
- { "com.sun.star.comp.stoc.OServiceManagerWrapper.component.getFactory", com_sun_star_comp_stoc_OServiceManagerWrapper_component_getFactory }, \
- { "com.sun.star.comp.stoc.SimpleRegistry.component.getFactory", com_sun_star_comp_stoc_SimpleRegistry_component_getFactory }, \
- { "com.sun.star.extensions.xml.sax.Writer", com_sun_star_extensions_xml_sax_Writer_component_getFactory }, \
- { "com.sun.star.security.comp.stoc.AccessController.component.getFactory", com_sun_star_security_comp_stoc_AccessController_component_getFactory }, \
- { "com.sun.star.security.comp.stoc.FilePolicy.component.getFactory", com_sun_star_security_comp_stoc_FilePolicy_component_getFactory }, \
+#define NON_APP_SPECIFIC_CONSTRUCTOR_MAP \
+ { "com_sun_star_comp_extensions_xml_sax_ParserExpat", com_sun_star_comp_extensions_xml_sax_ParserExpat }, \
+ { "com_sun_star_comp_extensions_xml_sax_FastParser", com_sun_star_comp_extensions_xml_sax_FastParser }, \
+ { "com_sun_star_comp_stoc_DLLComponentLoader", com_sun_star_comp_stoc_DLLComponentLoader }, \
+ { "com_sun_star_comp_stoc_ImplementationRegistration", com_sun_star_comp_stoc_ImplementationRegistration }, \
+ { "com_sun_star_comp_stoc_NestedRegistry", com_sun_star_comp_stoc_NestedRegistry }, \
+ { "com_sun_star_comp_stoc_ORegistryServiceManager", com_sun_star_comp_stoc_ORegistryServiceManager }, \
+ { "com_sun_star_comp_stoc_OServiceManager", com_sun_star_comp_stoc_OServiceManager }, \
+ { "com_sun_star_comp_stoc_OServiceManagerWrapper", com_sun_star_comp_stoc_OServiceManagerWrapper }, \
+ { "com_sun_star_comp_stoc_SimpleRegistry", com_sun_star_comp_stoc_SimpleRegistry }, \
+ { "com_sun_star_extensions_xml_sax_Writer", com_sun_star_extensions_xml_sax_Writer }, \
+ { "com_sun_star_security_comp_stoc_AccessController", com_sun_star_security_comp_stoc_AccessController }, \
+ { "com_sun_star_security_comp_stoc_FilePolicy", com_sun_star_security_comp_stoc_FilePolicy }, \
#endif /* DISABLE_DYNLOADING */
diff --git a/ios/experimental/LibreOffice/LibreOffice/lo.mm b/ios/experimental/LibreOffice/LibreOffice/lo.mm
index 5da9455f96a0..bce3874b33d3 100644
--- a/ios/experimental/LibreOffice/LibreOffice/lo.mm
+++ b/ios/experimental/LibreOffice/LibreOffice/lo.mm
@@ -17,11 +17,11 @@
#include <touch/touch.h>
extern "C"
-const lib_to_component_mapping *
-lo_get_library_map(void)
+const lib_to_factory_mapping *
+lo_get_factory_map(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_COMPONENT_MAP
+ static lib_to_factory_mapping map[] = {
+ NON_APP_SPECIFIC_FACTORY_MAP
{ "libanalysislo.a", analysis_component_getFactory },
{ "libanimcorelo.a", animcore_component_getFactory },
{ "libavmedialo.a", avmedia_component_getFactory },
@@ -82,11 +82,11 @@ lo_get_library_map(void)
}
extern "C"
-const lib_to_component_mapping *
-lo_get_implementation_map(void)
+const lib_to_constructor_mapping *
+lo_get_constructor_map(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_DIRECT_COMPONENT_MAP
+ static lib_to_constructor_mapping map[] = {
+ NON_APP_SPECIFIC_CONSTRUCTOR_MAP
{ NULL, NULL }
};
diff --git a/ios/experimental/TiledLibreOffice/TiledLibreOffice/lo.mm b/ios/experimental/TiledLibreOffice/TiledLibreOffice/lo.mm
index 074e4723096c..b2bec61f70f3 100644
--- a/ios/experimental/TiledLibreOffice/TiledLibreOffice/lo.mm
+++ b/ios/experimental/TiledLibreOffice/TiledLibreOffice/lo.mm
@@ -17,11 +17,11 @@
#include <touch/touch.h>
extern "C"
-const lib_to_component_mapping *
-lo_get_library_map(void)
+const lib_to_factory_mapping *
+lo_get_libmap(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_COMPONENT_MAP
+ static lib_to_factory_mapping map[] = {
+ NON_APP_SPECIFIC_FACTORY_MAP
{ "libanalysislo.a", analysis_component_getFactory },
{ "libanimcorelo.a", animcore_component_getFactory },
{ "libavmedialo.a", avmedia_component_getFactory },
@@ -82,11 +82,11 @@ lo_get_library_map(void)
}
extern "C"
-const lib_to_component_mapping *
-lo_get_implementation_map(void)
+const lib_to_constructor_mapping *
+lo_get_constructor_map(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_DIRECT_COMPONENT_MAP
+ static lib_to_constructor_mapping map[] = {
+ NON_APP_SPECIFIC_CONSTRUCTOR_MAP
{ NULL, NULL }
};
diff --git a/ios/qa/sc/filters-test.m b/ios/qa/sc/filters-test.m
index c1dade90025b..e732687c8df9 100644
--- a/ios/qa/sc/filters-test.m
+++ b/ios/qa/sc/filters-test.m
@@ -29,10 +29,10 @@ extern void * sc_component_getFactory( const char * pImplName, void * pServiceMa
extern void * scfilt_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
extern void * unoxml_component_getFactory( const char * pImplName, void * pServiceManager, void * pRegistryKey );
-const lib_to_component_mapping *
+const lib_to_factory_mapping *
lo_get_libmap(void)
{
- static lib_to_component_mapping map[] = {
+ static lib_to_factory_mapping map[] = {
{ "libanalysislo.a", analysis_component_getFactory },
{ "libdatelo.a", date_component_getFactory },
{ "libscfiltlo.a", scfilt_component_getFactory },
diff --git a/ios/shared/ios_sharedlo/cxx/mlo.mm b/ios/shared/ios_sharedlo/cxx/mlo.mm
index 6dc4ad1a7bc6..a9a5effd2eb0 100644
--- a/ios/shared/ios_sharedlo/cxx/mlo.mm
+++ b/ios/shared/ios_sharedlo/cxx/mlo.mm
@@ -23,11 +23,11 @@
#define MAP_LIB_LO_1(LIB) { "lib" #LIB "lo.a", LIB##1_component_getFactory }
extern "C"
-const lib_to_component_mapping *
-lo_get_library_map(void)
+const lib_to_factory_mapping *
+lo_get_factory_map(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_COMPONENT_MAP
+ static lib_to_factory_mapping map[] = {
+ NON_APP_SPECIFIC_FACTORY_MAP
//from IOS
@@ -74,11 +74,11 @@ lo_get_library_map(void)
}
extern "C"
-const lib_to_component_mapping *
-lo_get_implementation_map(void)
+const lib_to_constructor_mapping *
+lo_get_constructor_map(void)
{
- static lib_to_component_mapping map[] = {
- NON_APP_SPECIFIC_DIRECT_COMPONENT_MAP
+ static lib_to_constructor_mapping map[] = {
+ NON_APP_SPECIFIC_CONSTRUCTOR_MAP
{ NULL, NULL }
};
diff --git a/sax/source/expatwrap/expwrap.component b/sax/source/expatwrap/expwrap.component
index 9365a6d7d4da..306e517ef2ea 100644
--- a/sax/source/expatwrap/expwrap.component
+++ b/sax/source/expatwrap/expwrap.component
@@ -18,14 +18,17 @@
-->
<component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@"
- prefix="direct" xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.extensions.xml.sax.ParserExpat">
+ xmlns="http://openoffice.org/2010/uno-components">
+ <implementation name="com.sun.star.comp.extensions.xml.sax.ParserExpat"
+ constructor="com_sun_star_comp_extensions_xml_sax_ParserExpat">
<service name="com.sun.star.xml.sax.Parser"/>
</implementation>
- <implementation name="com.sun.star.extensions.xml.sax.Writer">
+ <implementation name="com.sun.star.extensions.xml.sax.Writer"
+ constructor="com_sun_star_extensions_xml_sax_Writer">
<service name="com.sun.star.xml.sax.Writer"/>
</implementation>
- <implementation name="com.sun.star.comp.extensions.xml.sax.FastParser">
+ <implementation name="com.sun.star.comp.extensions.xml.sax.FastParser"
+ constructor="com_sun_star_comp_extensions_xml_sax_FastParser">
<service name="com.sun.star.xml.sax.FastParser"/>
</implementation>
</component>
diff --git a/sax/source/expatwrap/sax_expat.cxx b/sax/source/expatwrap/sax_expat.cxx
index 4f00ad9f378e..981d68e2cd4f 100644
--- a/sax/source/expatwrap/sax_expat.cxx
+++ b/sax/source/expatwrap/sax_expat.cxx
@@ -19,6 +19,7 @@
#include <stdlib.h>
#include <string.h>
#include <sal/alloca.h>
+#include <cassert>
#include <vector>
#include <osl/diagnose.h>
@@ -30,7 +31,6 @@
#include <com/sun/star/xml/sax/SAXParseException.hpp>
#include <com/sun/star/io/XSeekable.hpp>
-#include <cppuhelper/factory.hxx>
#include <cppuhelper/weak.hxx>
#include <cppuhelper/implbase3.hxx>
#include <cppuhelper/supportsservice.hxx>
@@ -42,13 +42,16 @@ using namespace ::osl;
using namespace ::cppu;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::registry;
using namespace ::com::sun::star::xml::sax;
using namespace ::com::sun::star::io;
#include "attrlistimpl.hxx"
#include "xml2utf.hxx"
+namespace com { namespace sun { namespace star { namespace uno {
+ class XComponentContext;
+} } } }
+
namespace {
// Useful macros for correct String conversion depending on the choosen expat-mode
@@ -129,17 +132,6 @@ OUString XmlChar2OUString( const XML_Char *p )
class SaxExpatParser_Impl;
-OUString SaxExpatParser_getImplementationName() {
- return OUString("com.sun.star.comp.extensions.xml.sax.ParserExpat");
-}
-
-Sequence< OUString > SaxExpatParser_getSupportedServiceNames(void)
-{
- Sequence<OUString> seq(1);
- seq[0] = OUString("com.sun.star.xml.sax.Parser");
- return seq;
-}
-
// This class implements the external Parser interface
class SaxExpatParser
: public WeakImplHelper3< XInitialization
@@ -598,7 +590,7 @@ void SaxExpatParser::setLocale( const Locale & locale ) throw (RuntimeException)
// XServiceInfo
OUString SaxExpatParser::getImplementationName() throw ()
{
- return SaxExpatParser_getImplementationName();
+ return OUString("com.sun.star.comp.extensions.xml.sax.ParserExpat");
}
// XServiceInfo
@@ -610,7 +602,9 @@ sal_Bool SaxExpatParser::supportsService(const OUString& ServiceName) throw ()
// XServiceInfo
Sequence< OUString > SaxExpatParser::getSupportedServiceNames(void) throw ()
{
- return SaxExpatParser_getSupportedServiceNames();
+ Sequence<OUString> seq(1);
+ seq[0] = "com.sun.star.xml.sax.Parser";
+ return seq;
}
@@ -1023,27 +1017,18 @@ void SaxExpatParser_Impl::callbackEndCDATA( void *pvThis )
CALL_ELEMENT_HANDLER_AND_CARE_FOR_EXCEPTIONS(pImpl,rExtendedDocumentHandler->endCDATA() );
}
-Reference< XInterface > SAL_CALL SaxExpatParser_CreateInstance(
- SAL_UNUSED_PARAMETER const Reference<css::uno::XComponentContext> & )
- SAL_THROW((css::uno::Exception))
-{
- SaxExpatParser *p = new SaxExpatParser;
- return Reference< XInterface > ( (OWeakObject * ) p );
-}
-
} // namespace
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_comp_extensions_xml_sax_ParserExpat_component_getFactory(
- const char *, void *, void * )
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_comp_extensions_xml_sax_ParserExpat(
+ SAL_UNUSED_PARAMETER css::uno::XComponentContext *,
+ uno_Sequence * arguments)
{
- Reference<css::lang::XSingleComponentFactory> xFactory(
- cppu::createSingleComponentFactory(
- &SaxExpatParser_CreateInstance,
- SaxExpatParser_getImplementationName(),
- SaxExpatParser_getSupportedServiceNames()));
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(new SaxExpatParser));
+ x->acquire();
+ return x.get();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sax/source/expatwrap/saxwriter.cxx b/sax/source/expatwrap/saxwriter.cxx
index b17f3787ac10..6279640e971c 100644
--- a/sax/source/expatwrap/saxwriter.cxx
+++ b/sax/source/expatwrap/saxwriter.cxx
@@ -19,8 +19,9 @@
#include <string.h>
-#include <stack>
+#include <cassert>
#include <set>
+#include <stack>
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/util/XCloneable.hpp>
@@ -31,7 +32,6 @@
#include <com/sun/star/io/XActiveDataSource.hpp>
-#include <cppuhelper/factory.hxx>
#include <cppuhelper/weak.hxx>
#include <cppuhelper/implbase2.hxx>
#include <cppuhelper/supportsservice.hxx>
@@ -46,13 +46,16 @@ using namespace ::osl;
using namespace ::cppu;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
-using namespace ::com::sun::star::registry;
using namespace ::com::sun::star::xml::sax;
using namespace ::com::sun::star::util;
using namespace ::com::sun::star::io;
#include "xml2utf.hxx"
+namespace com { namespace sun { namespace star { namespace uno {
+ class XComponentContext;
+} } } }
+
#define LINEFEED 10
#define SEQUENCESIZE 1024
#define MAXCOLUMNCOUNT 72
@@ -867,17 +870,6 @@ static inline sal_Int32 getFirstLineBreak( const OUString & str ) throw ()
return -1;
}
-OUString SAXWriter_getImplementationName() {
- return OUString("com.sun.star.extensions.xml.sax.Writer");
-}
-
-Sequence< OUString > SAXWriter_getSupportedServiceNames(void) throw ()
-{
- Sequence<OUString> seq(1);
- seq.getArray()[0] = OUString("com.sun.star.xml.sax.Writer");
- return seq;
-}
-
class SAXWriter :
public WeakImplHelper2<
XWriter,
@@ -998,7 +990,7 @@ static inline sal_Bool isFirstCharWhitespace( const sal_Unicode *p ) throw()
// XServiceInfo
OUString SAXWriter::getImplementationName() throw()
{
- return SAXWriter_getImplementationName();
+ return OUString("com.sun.star.extensions.xml.sax.Writer");
}
// XServiceInfo
@@ -1010,7 +1002,9 @@ sal_Bool SAXWriter::supportsService(const OUString& ServiceName) throw()
// XServiceInfo
Sequence< OUString > SAXWriter::getSupportedServiceNames(void) throw ()
{
- return SAXWriter_getSupportedServiceNames();
+ Sequence<OUString> seq(1);
+ seq[0] = "com.sun.star.xml.sax.Writer";
+ return seq;
}
void SAXWriter::startDocument() throw(SAXException, RuntimeException )
@@ -1376,26 +1370,18 @@ void SAXWriter::unknown(const OUString& sString) throw (SAXException, RuntimeExc
}
}
-Reference < XInterface > SAL_CALL SAXWriter_CreateInstance(
- SAL_UNUSED_PARAMETER const Reference<css::uno::XComponentContext> & )
- SAL_THROW((css::uno::Exception))
-{
- SAXWriter *p = new SAXWriter;
- return Reference< XInterface > ( (static_cast< OWeakObject * >(p)) );
-}
-
} // namespace
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_extensions_xml_sax_Writer_component_getFactory(
- const char *, void *, void * )
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_extensions_xml_sax_Writer(
+ SAL_UNUSED_PARAMETER css::uno::XComponentContext *,
+ uno_Sequence * arguments)
{
- Reference<css::lang::XSingleComponentFactory > xFactory(
- cppu::createSingleComponentFactory(
- &SAXWriter_CreateInstance, SAXWriter_getImplementationName(),
- SAXWriter_getSupportedServiceNames()));
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(new SAXWriter));
+ x->acquire();
+ return x.get();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sax/source/fastparser/fastparser.cxx b/sax/source/fastparser/fastparser.cxx
index 8d17b650cf0d..04cfbee960a9 100644
--- a/sax/source/fastparser/fastparser.cxx
+++ b/sax/source/fastparser/fastparser.cxx
@@ -27,7 +27,6 @@
#include <com/sun/star/xml/sax/XFastContextHandler.hpp>
#include <com/sun/star/xml/sax/XFastDocumentHandler.hpp>
#include <com/sun/star/xml/sax/XFastTokenHandler.hpp>
-#include <cppuhelper/factory.hxx>
#include <cppuhelper/supportsservice.hxx>
#include <osl/conditn.hxx>
#include <osl/diagnose.h>
@@ -42,9 +41,14 @@
#include <stack>
#include <vector>
#include <queue>
+#include <cassert>
#include <cstring>
#include <expat.h>
+namespace com { namespace sun { namespace star { namespace uno {
+ class XComponentContext;
+} } } }
+
using namespace ::std;
using namespace ::osl;
using namespace ::cppu;
@@ -57,17 +61,6 @@ using namespace sax_fastparser;
namespace {
-OUString FastSaxParser_getImplementationName() {
- return OUString("com.sun.star.comp.extensions.xml.sax.FastParser");
-}
-
-uno::Sequence<OUString> FastSaxParser_getSupportedServiceNames()
-{
- Sequence<OUString> seq(1);
- seq.getArray()[0] = OUString("com.sun.star.xml.sax.FastParser");
- return seq;
-}
-
struct Event;
class FastLocatorImpl;
struct NamespaceDefine;
@@ -1404,7 +1397,7 @@ void FastSaxParser::setLocale( const lang::Locale& rLocale )
OUString FastSaxParser::getImplementationName()
throw (uno::RuntimeException)
{
- return FastSaxParser_getImplementationName();
+ return OUString("com.sun.star.comp.extensions.xml.sax.FastParser");
}
sal_Bool FastSaxParser::supportsService( const OUString& ServiceName )
@@ -1416,7 +1409,9 @@ sal_Bool FastSaxParser::supportsService( const OUString& ServiceName )
uno::Sequence<OUString> FastSaxParser::getSupportedServiceNames()
throw (uno::RuntimeException)
{
- return FastSaxParser_getSupportedServiceNames();
+ Sequence<OUString> seq(1);
+ seq[0] = OUString("com.sun.star.xml.sax.FastParser");
+ return seq;
}
bool FastSaxParser::hasNamespaceURL( const OUString& rPrefix ) const
@@ -1426,25 +1421,16 @@ bool FastSaxParser::hasNamespaceURL( const OUString& rPrefix ) const
} // namespace sax_fastparser
-static Reference< XInterface > SAL_CALL FastSaxParser_CreateInstance(
- SAL_UNUSED_PARAMETER const Reference<css::uno::XComponentContext> & )
- SAL_THROW((css::uno::Exception))
-{
- FastSaxParser *p = new FastSaxParser;
- return Reference< XInterface > ( (OWeakObject * ) p );
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_comp_extensions_xml_sax_FastParser_component_getFactory(
- const char *, void *, void * )
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_comp_extensions_xml_sax_FastParser(
+ SAL_UNUSED_PARAMETER css::uno::XComponentContext *,
+ uno_Sequence * arguments)
{
- Reference<css::lang::XSingleComponentFactory> xFactory(
- cppu::createSingleComponentFactory(
- &FastSaxParser_CreateInstance,
- FastSaxParser_getImplementationName(),
- FastSaxParser_getSupportedServiceNames()));
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(new FastSaxParser));
+ x->acquire();
+ return x.get();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/defaultregistry/defaultregistry.cxx b/stoc/source/defaultregistry/defaultregistry.cxx
index 7074683c1906..285e379d114e 100644
--- a/stoc/source/defaultregistry/defaultregistry.cxx
+++ b/stoc/source/defaultregistry/defaultregistry.cxx
@@ -21,7 +21,6 @@
#include <osl/diagnose.h>
#include <cppuhelper/queryinterface.hxx>
#include <cppuhelper/weak.hxx>
-#include <cppuhelper/factory.hxx>
#include <cppuhelper/implbase1.hxx>
#include <cppuhelper/implbase4.hxx>
#include <cppuhelper/implbase3.hxx>
@@ -44,13 +43,6 @@ using namespace com::sun::star::container;
using namespace cppu;
using namespace osl;
-static Sequence< OUString > NestedRegistryImpl_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = OUString("com.sun.star.registry.NestedRegistry");
- return seqNames;
-}
-
namespace {
class NestedKeyImpl;
@@ -1207,7 +1199,9 @@ sal_Bool SAL_CALL NestedRegistryImpl::supportsService( const OUString& ServiceNa
Sequence<OUString> SAL_CALL NestedRegistryImpl::getSupportedServiceNames( )
throw(RuntimeException)
{
- return NestedRegistryImpl_getSupportedServiceNames();
+ Sequence< OUString > seqNames(1);
+ seqNames[0] = "com.sun.star.registry.NestedRegistry";
+ return seqNames;
}
//*************************************************************************
@@ -1355,32 +1349,16 @@ void SAL_CALL NestedRegistryImpl::mergeKey( const OUString& aKeyName, const OUSt
} // namespace
-static Reference<XInterface> NestedRegistry_CreateInstance(
- SAL_UNUSED_PARAMETER const Reference<XComponentContext>& )
- throw(Exception)
-{
- Reference<XInterface> xRet;
- XSimpleRegistry *pRegistry = (XSimpleRegistry*) new NestedRegistryImpl;
-
- if (pRegistry)
- {
- xRet = Reference<XInterface>::query(pRegistry);
- }
-
- return xRet;
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_comp_stoc_NestedRegistry_component_getFactory(
- const char * , void * , void * )
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_comp_stoc_NestedRegistry(
+ SAL_UNUSED_PARAMETER css::uno::XComponentContext *,
+ uno_Sequence * arguments)
{
- Reference< XSingleComponentFactory > xFactory;
- xFactory = createSingleComponentFactory(
- NestedRegistry_CreateInstance,
- "com.sun.star.comp.stoc.NestedRegistry",
- NestedRegistryImpl_getSupportedServiceNames() );
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(new NestedRegistryImpl));
+ x->acquire();
+ return x.get();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/implementationregistration/implreg.cxx b/stoc/source/implementationregistration/implreg.cxx
index 4e8e6970fff5..3490320f9aa8 100644
--- a/stoc/source/implementationregistration/implreg.cxx
+++ b/stoc/source/implementationregistration/implreg.cxx
@@ -22,7 +22,6 @@
#include <list>
#include <cppuhelper/queryinterface.hxx>
-#include <cppuhelper/factory.hxx>
#include <cppuhelper/weak.hxx>
#include <cppuhelper/implbase3.hxx>
#include <cppuhelper/implementationentry.hxx>
@@ -63,9 +62,6 @@ using namespace com::sun::star::registry;
using namespace cppu;
using namespace osl;
-#define IMPLNAME "com.sun.star.comp.stoc.ImplementationRegistration"
-#define SERVICENAME "com.sun.star.registry.ImplementationRegistration"
-
namespace {
struct StringPool
@@ -113,13 +109,6 @@ const StringPool &spool()
return *pPool;
}
-static Sequence< OUString > ImplementationRegistration_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = SERVICENAME;
- return seqNames;
-}
-
//*************************************************************************
// static deleteAllLinkReferences()
//
@@ -1309,7 +1298,7 @@ ImplementationRegistration::~ImplementationRegistration() {}
// XServiceInfo
OUString ImplementationRegistration::getImplementationName() throw(RuntimeException)
{
- return OUString(IMPLNAME);
+ return OUString("com.sun.star.comp.stoc.ImplementationRegistration");
}
// XServiceInfo
@@ -1321,7 +1310,9 @@ sal_Bool ImplementationRegistration::supportsService(const OUString& ServiceName
// XServiceInfo
Sequence< OUString > ImplementationRegistration::getSupportedServiceNames(void) throw(RuntimeException)
{
- return ImplementationRegistration_getSupportedServiceNames();
+ Sequence< OUString > seqNames(1);
+ seqNames[0] = "com.sun.star.registry.ImplementationRegistration";
+ return seqNames;
}
Reference< XSimpleRegistry > ImplementationRegistration::getRegistryFromServiceManager()
@@ -1825,23 +1816,16 @@ Reference< XSimpleRegistry > ImplementationRegistration::createTemporarySimpleRe
}
-static Reference<XInterface> ImplementationRegistration_CreateInstance(
- const Reference<XComponentContext> & xCtx ) // throw(Exception)
-{
- return (XImplementationRegistration *)new ImplementationRegistration(xCtx);
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_comp_stoc_ImplementationRegistration_component_getFactory(
- const char * , void * , void * )
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_comp_stoc_ImplementationRegistration(
+ css::uno::XComponentContext * context, uno_Sequence * arguments)
{
- Reference< css::lang::XSingleComponentFactory > xFactory;
- xFactory = createSingleComponentFactory(
- ImplementationRegistration_CreateInstance,
- IMPLNAME,
- ImplementationRegistration_getSupportedServiceNames() );
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(
+ new ImplementationRegistration(context)));
+ x->acquire();
+ return x.get();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/loader/dllcomponentloader.cxx b/stoc/source/loader/dllcomponentloader.cxx
index 402ed4a110af..d4ab87f1e05e 100644
--- a/stoc/source/loader/dllcomponentloader.cxx
+++ b/stoc/source/loader/dllcomponentloader.cxx
@@ -29,7 +29,6 @@
#include <uno/mapping.hxx>
#include <cppuhelper/queryinterface.hxx>
#include <cppuhelper/weak.hxx>
-#include <cppuhelper/factory.hxx>
#include <cppuhelper/shlib.hxx>
#include <cppuhelper/implbase3.hxx>
#include <cppuhelper/implementationentry.hxx>
@@ -42,10 +41,6 @@
#include <com/sun/star/lang/XInitialization.hpp>
#include <com/sun/star/registry/XRegistryKey.hpp>
-#define SERVICENAME "com.sun.star.loader.SharedLibrary"
-#define IMPLNAME "com.sun.star.comp.stoc.DLLComponentLoader"
-
-
using namespace com::sun::star;
using namespace com::sun::star::uno;
using namespace com::sun::star::loader;
@@ -56,13 +51,6 @@ using namespace osl;
namespace {
-static Sequence< OUString > DllComponentLoader_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = OUString(SERVICENAME);
- return seqNames;
-}
-
class DllComponentLoader
: public WeakImplHelper3< XImplementationLoader,
XInitialization,
@@ -101,7 +89,7 @@ DllComponentLoader::~DllComponentLoader() {}
OUString SAL_CALL DllComponentLoader::getImplementationName( )
throw(::com::sun::star::uno::RuntimeException)
{
- return OUString(IMPLNAME);
+ return OUString("com.sun.star.comp.stoc.DLLComponentLoader");
}
sal_Bool SAL_CALL DllComponentLoader::supportsService( const OUString& ServiceName )
@@ -113,7 +101,9 @@ sal_Bool SAL_CALL DllComponentLoader::supportsService( const OUString& ServiceNa
Sequence<OUString> SAL_CALL DllComponentLoader::getSupportedServiceNames( )
throw(::com::sun::star::uno::RuntimeException)
{
- return DllComponentLoader_getSupportedServiceNames();
+ Sequence< OUString > seqNames(1);
+ seqNames[0] = "com.sun.star.loader.SharedLibrary";
+ return seqNames;
}
//*************************************************************************
@@ -174,32 +164,15 @@ sal_Bool SAL_CALL DllComponentLoader::writeRegistryInfo(
}
-static Reference<XInterface> DllComponentLoader_CreateInstance(
- const Reference<XComponentContext> & xCtx ) throw(Exception)
-{
- Reference<XInterface> xRet;
-
- XImplementationLoader *pXLoader = (XImplementationLoader *)new DllComponentLoader(xCtx);
-
- if (pXLoader)
- {
- xRet = Reference<XInterface>::query(pXLoader);
- }
-
- return xRet;
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_comp_stoc_DLLComponentLoader_component_getFactory(
- const char * , void * , void * )
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_comp_stoc_DLLComponentLoader(
+ css::uno::XComponentContext * context, uno_Sequence * arguments)
{
- Reference< css::lang::XSingleComponentFactory > xFactory;
- xFactory = createSingleComponentFactory(
- DllComponentLoader_CreateInstance,
- IMPLNAME,
- DllComponentLoader_getSupportedServiceNames() );
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(new DllComponentLoader(context)));
+ x->acquire();
+ return x.get();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/security/access_controller.cxx b/stoc/source/security/access_controller.cxx
index 6de5cceef057..07e3b58e719c 100644
--- a/stoc/source/security/access_controller.cxx
+++ b/stoc/source/security/access_controller.cxx
@@ -34,7 +34,6 @@
#include <cppuhelper/implbase1.hxx>
#include <cppuhelper/compbase3.hxx>
-#include <cppuhelper/factory.hxx>
#include <cppuhelper/implementationentry.hxx>
#include <cppuhelper/supportsservice.hxx>
@@ -52,7 +51,6 @@
#define SERVICE_NAME "com.sun.star.security.AccessController"
-#define IMPL_NAME "com.sun.star.security.comp.stoc.AccessController"
#define USER_CREDS "access-control.user-credentials"
@@ -962,7 +960,7 @@ Reference< security::XAccessControlContext > AccessController::getContext()
OUString AccessController::getImplementationName()
throw (RuntimeException)
{
- return OUString(IMPL_NAME);
+ return OUString("com.sun.star.security.comp.stoc.AccessController");
}
//__________________________________________________________________________________________________
sal_Bool AccessController::supportsService( OUString const & serviceName )
@@ -971,39 +969,25 @@ sal_Bool AccessController::supportsService( OUString const & serviceName )
return cppu::supportsService(this, serviceName);
}
//__________________________________________________________________________________________________
-static Sequence< OUString > AccessController_getSupportedServiceNames()
-{
- Sequence< OUString > aSNS( 1 );
- aSNS.getArray()[0] = OUString(SERVICE_NAME);
- return aSNS;
-}
-
Sequence< OUString > AccessController::getSupportedServiceNames()
throw (RuntimeException)
{
- return AccessController_getSupportedServiceNames();
+ Sequence< OUString > aSNS( 1 );
+ aSNS[0] = OUString(SERVICE_NAME);
+ return aSNS;
}
}
-static Reference< XInterface > SAL_CALL AccessController_create(
- Reference< XComponentContext > const & xComponentContext )
- SAL_THROW( (Exception) )
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_security_comp_stoc_AccessController(
+ css::uno::XComponentContext * context, uno_Sequence * arguments)
{
- return (OWeakObject *)new AccessController( xComponentContext );
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_security_comp_stoc_AccessController_component_getFactory(
- const char * , void * , void * )
-{
- Reference< css::lang::XSingleComponentFactory > xFactory;
- xFactory = createSingleComponentFactory(
- AccessController_create,
- IMPL_NAME,
- AccessController_getSupportedServiceNames() );
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(new AccessController(context)));
+ x->acquire();
+ return x.get();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/security/file_policy.cxx b/stoc/source/security/file_policy.cxx
index 4d51240f6017..7d0ad08e4708 100644
--- a/stoc/source/security/file_policy.cxx
+++ b/stoc/source/security/file_policy.cxx
@@ -39,7 +39,6 @@
#include <com/sun/star/io/FilePermission.hpp>
#include <com/sun/star/connection/SocketPermission.hpp>
-#define SERVICE_NAME "com.sun.star.security.Policy"
#define IMPL_NAME "com.sun.star.security.comp.stoc.FilePolicy"
using namespace ::osl;
@@ -532,39 +531,25 @@ sal_Bool FilePolicy::supportsService( OUString const & serviceName )
return cppu::supportsService(this, serviceName);
}
//__________________________________________________________________________________________________
-static Sequence< OUString > FilePolicy_getSupportedServiceNames() SAL_THROW(())
-{
- Sequence< OUString > aSNS( 1 );
- aSNS.getArray()[0] = OUString(SERVICE_NAME);
- return aSNS;
-}
-
Sequence< OUString > FilePolicy::getSupportedServiceNames()
throw (RuntimeException)
{
- return FilePolicy_getSupportedServiceNames();
+ Sequence< OUString > aSNS( 1 );
+ aSNS[0] = OUString("com.sun.star.security.Policy");
+ return aSNS;
}
} // namespace
-static Reference< XInterface > FilePolicy_CreateInstance(
- Reference< XComponentContext > const & xComponentContext )
- SAL_THROW( (Exception) )
-{
- return (OWeakObject *)new FilePolicy( xComponentContext );
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_security_comp_stoc_FilePolicy_component_getFactory(
- const char * , void * , void * )
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_security_comp_stoc_FilePolicy(
+ css::uno::XComponentContext * context, uno_Sequence * arguments)
{
- Reference< css::lang::XSingleComponentFactory > xFactory;
- xFactory = createSingleComponentFactory(
- FilePolicy_CreateInstance,
- IMPL_NAME,
- FilePolicy_getSupportedServiceNames() );
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(new FilePolicy(context)));
+ x->acquire();
+ return x.get();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/servicemanager/servicemanager.cxx b/stoc/source/servicemanager/servicemanager.cxx
index 97eda24b564c..9c96a7846fbf 100644
--- a/stoc/source/servicemanager/servicemanager.cxx
+++ b/stoc/source/servicemanager/servicemanager.cxx
@@ -28,7 +28,6 @@
#include <cppuhelper/queryinterface.hxx>
#include <cppuhelper/weakref.hxx>
#include <cppuhelper/component.hxx>
-#include <cppuhelper/factory.hxx>
#include <cppuhelper/implbase1.hxx>
#include <cppuhelper/implementationentry.hxx>
#include <cppuhelper/component_context.hxx>
@@ -67,29 +66,6 @@ using namespace std;
namespace {
-Sequence< OUString > OServiceManager_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(2);
- seqNames.getArray()[0] = "com.sun.star.lang.MultiServiceFactory";
- seqNames.getArray()[1] = "com.sun.star.lang.ServiceManager";
- return seqNames;
-}
-
-Sequence< OUString > ORegistryServiceManager_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(2);
- seqNames.getArray()[0] = "com.sun.star.lang.MultiServiceFactory";
- seqNames.getArray()[1] = "com.sun.star.lang.RegistryServiceManager";
- return seqNames;
-}
-
-Sequence< OUString > OServiceManagerWrapper_getSupportedServiceNames()
-{
- Sequence< OUString > seqNames(1);
- seqNames.getArray()[0] = "com.sun.star.lang.MultiServiceFactory";
- return seqNames;
-}
-
static Sequence< OUString > retrieveAsciiValueList(
const Reference< XSimpleRegistry > &xReg, const OUString &keyName )
{
@@ -1083,7 +1059,6 @@ void OServiceManager::initialize( Sequence< Any > const & )
OUString OServiceManager::getImplementationName()
throw(::com::sun::star::uno::RuntimeException)
{
- check_undisposed();
return OUString("com.sun.star.comp.stoc.OServiceManager");
}
@@ -1098,8 +1073,10 @@ sal_Bool OServiceManager::supportsService(const OUString& ServiceName)
Sequence< OUString > OServiceManager::getSupportedServiceNames()
throw(::com::sun::star::uno::RuntimeException)
{
- check_undisposed();
- return OServiceManager_getSupportedServiceNames();
+ Sequence< OUString > seqNames(2);
+ seqNames[0] = "com.sun.star.lang.MultiServiceFactory";
+ seqNames[1] = "com.sun.star.lang.ServiceManager";
+ return seqNames;
}
@@ -1601,8 +1578,10 @@ Sequence< OUString > ORegistryServiceManager::getAvailableServiceNames()
Sequence< OUString > ORegistryServiceManager::getSupportedServiceNames()
throw(::com::sun::star::uno::RuntimeException)
{
- check_undisposed();
- return ORegistryServiceManager_getSupportedServiceNames();
+ Sequence< OUString > seqNames(2);
+ seqNames[0] = "com.sun.star.lang.MultiServiceFactory";
+ seqNames[1] = "com.sun.star.lang.RegistryServiceManager";
+ return seqNames;
}
@@ -1691,67 +1670,37 @@ Any ORegistryServiceManager::getPropertyValue(const OUString& PropertyName)
} // namespace
-static Reference<XInterface > OServiceManager_CreateInstance(
- const Reference< XComponentContext > & xContext )
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_comp_stoc_OServiceManager(
+ css::uno::XComponentContext * context, uno_Sequence * arguments)
{
- return Reference<XInterface >(
- static_cast< XInterface * >(
- static_cast< OWeakObject * >( new OServiceManager( xContext ) ) ) );
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_comp_stoc_OServiceManager_component_getFactory(
- const char * , void * , void * )
-{
- Reference< css::lang::XSingleComponentFactory > xFactory;
- xFactory = createSingleComponentFactory(
- OServiceManager_CreateInstance,
- "com.sun.star.comp.stoc.OServiceManager",
- OServiceManager_getSupportedServiceNames() );
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(new OServiceManager(context)));
+ x->acquire();
+ return x.get();
}
-static Reference<XInterface > ORegistryServiceManager_CreateInstance(
- const Reference< XComponentContext > & xContext )
- throw(::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_comp_stoc_ORegistryServiceManager(
+ css::uno::XComponentContext * context, uno_Sequence * arguments)
{
- return Reference<XInterface >(
- static_cast< XInterface * >(
- static_cast< OWeakObject * >( new ORegistryServiceManager( xContext ) ) ) );
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_comp_stoc_ORegistryServiceManager_component_getFactory(
- const char * , void * , void * )
-{
- Reference< css::lang::XSingleComponentFactory > xFactory;
- xFactory = createSingleComponentFactory(
- ORegistryServiceManager_CreateInstance,
- "com.sun.star.comp.stoc.ORegistryServiceManager",
- ORegistryServiceManager_getSupportedServiceNames() );
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(new ORegistryServiceManager(context)));
+ x->acquire();
+ return x.get();
}
-static Reference<XInterface > OServiceManagerWrapper_CreateInstance(
- const Reference< XComponentContext > & xContext )
- throw (Exception)
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_comp_stoc_OServiceManagerWrapper(
+ css::uno::XComponentContext * context, uno_Sequence * arguments)
{
- return (OWeakObject *)new OServiceManagerWrapper( xContext );
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_comp_stoc_OServiceManagerWrapper_component_getFactory(
- const char * , void * , void * )
-{
- Reference< css::lang::XSingleComponentFactory > xFactory;
- xFactory = createSingleComponentFactory(
- OServiceManagerWrapper_CreateInstance,
- "com.sun.star.comp.stoc.OServiceManagerWrapper",
- OServiceManagerWrapper_getSupportedServiceNames() );
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(new OServiceManagerWrapper(context)));
+ x->acquire();
+ return x.get();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/source/simpleregistry/simpleregistry.cxx b/stoc/source/simpleregistry/simpleregistry.cxx
index 80e30daeab0b..d1a761b46f63 100644
--- a/stoc/source/simpleregistry/simpleregistry.cxx
+++ b/stoc/source/simpleregistry/simpleregistry.cxx
@@ -34,9 +34,9 @@
#include "com/sun/star/uno/XComponentContext.hpp"
#include "com/sun/star/uno/XInterface.hpp"
#include "com/sun/star/uno/Sequence.hxx"
-#include <cppuhelper/factory.hxx>
#include "cppuhelper/implbase1.hxx"
#include "cppuhelper/implbase2.hxx"
+#include "cppuhelper/supportsservice.hxx"
#include "cppuhelper/weak.hxx"
#include "osl/mutex.hxx"
#include "registry/registry.hxx"
@@ -52,12 +52,6 @@
namespace {
-static css::uno::Sequence< OUString > SimpleRegistry_getSupportedServiceNames() {
- css::uno::Sequence< OUString > names(1);
- names[0] = "com.sun.star.registry.SimpleRegistry";
- return names;
-}
-
class SimpleRegistry:
public cppu::WeakImplHelper2<
css::registry::XSimpleRegistry, css::lang::XServiceInfo >
@@ -105,11 +99,15 @@ private:
virtual sal_Bool SAL_CALL supportsService(OUString const & ServiceName)
throw (css::uno::RuntimeException)
- { return ServiceName == getSupportedServiceNames()[0]; }
+ { return cppu::supportsService(this, ServiceName); }
virtual css::uno::Sequence< OUString > SAL_CALL
getSupportedServiceNames() throw (css::uno::RuntimeException)
- { return SimpleRegistry_getSupportedServiceNames(); }
+ {
+ css::uno::Sequence< OUString > names(1);
+ names[0] = "com.sun.star.registry.SimpleRegistry";
+ return names;
+ }
Registry registry_;
};
@@ -1125,24 +1123,16 @@ void SimpleRegistry::mergeKey(
}
-static css::uno::Reference< css::uno::XInterface > SimpleRegistry_CreateInstance(
- SAL_UNUSED_PARAMETER css::uno::Reference< css::uno::XComponentContext >
- const &)
-{
- return static_cast< cppu::OWeakObject * >(new SimpleRegistry);
-}
-
-extern "C" SAL_DLLPUBLIC_EXPORT void * SAL_CALL
-com_sun_star_comp_stoc_SimpleRegistry_component_getFactory(
- const char * , void * , void * )
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL
+com_sun_star_comp_stoc_SimpleRegistry(
+ SAL_UNUSED_PARAMETER css::uno::XComponentContext *,
+ uno_Sequence * arguments)
{
- css::uno::Reference< css::lang::XSingleComponentFactory > xFactory;
- xFactory = cppu::createSingleComponentFactory(
- SimpleRegistry_CreateInstance,
- "com.sun.star.comp.stoc.SimpleRegistry",
- SimpleRegistry_getSupportedServiceNames() );
- xFactory->acquire();
- return xFactory.get();
+ assert(arguments != 0 && arguments->nElements == 0); (void) arguments;
+ css::uno::Reference<css::uno::XInterface> x(
+ static_cast<cppu::OWeakObject *>(new SimpleRegistry));
+ x->acquire();
+ return x.get();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/stoc/util/bootstrap.component b/stoc/util/bootstrap.component
index f06de749e6ac..81f622e2d222 100644
--- a/stoc/util/bootstrap.component
+++ b/stoc/util/bootstrap.component
@@ -18,30 +18,39 @@
-->
<component loader="com.sun.star.loader.SharedLibrary" environment="@CPPU_ENV@"
- prefix="direct" xmlns="http://openoffice.org/2010/uno-components">
- <implementation name="com.sun.star.comp.stoc.DLLComponentLoader">
+ xmlns="http://openoffice.org/2010/uno-components">
+ <implementation name="com.sun.star.comp.stoc.DLLComponentLoader"
+ constructor="com_sun_star_comp_stoc_DLLComponentLoader">
<service name="com.sun.star.loader.SharedLibrary"/>
</implementation>
- <implementation name="com.sun.star.comp.stoc.ImplementationRegistration">
+ <implementation name="com.sun.star.comp.stoc.ImplementationRegistration"
+ constructor="com_sun_star_comp_stoc_ImplementationRegistration">
<service name="com.sun.star.registry.ImplementationRegistration"/>
</implementation>
- <implementation name="com.sun.star.comp.stoc.NestedRegistry">
+ <implementation name="com.sun.star.comp.stoc.NestedRegistry"
+ constructor="com_sun_star_comp_stoc_NestedRegistry">
<service name="com.sun.star.registry.NestedRegistry"/>
</implementation>
- <implementation name="com.sun.star.comp.stoc.ORegistryServiceManager">
+ <implementation name="com.sun.star.comp.stoc.ORegistryServiceManager"
+ constructor="com_sun_star_comp_stoc_ORegistryServiceManager">
<service name="com.sun.star.lang.RegistryServiceManager"/>
</implementation>
- <implementation name="com.sun.star.comp.stoc.OServiceManager">
+ <implementation name="com.sun.star.comp.stoc.OServiceManager"
+ constructor="com_sun_star_comp_stoc_OServiceManager">
<service name="com.sun.star.lang.ServiceManager"/>
</implementation>
- <implementation name="com.sun.star.comp.stoc.OServiceManagerWrapper"/>
- <implementation name="com.sun.star.comp.stoc.SimpleRegistry">
+ <implementation name="com.sun.star.comp.stoc.OServiceManagerWrapper"
+ constructor="com_sun_star_comp_stoc_OServiceManagerWrapper"/>
+ <implementation name="com.sun.star.comp.stoc.SimpleRegistry"
+ constructor="com_sun_star_comp_stoc_SimpleRegistry">
<service name="com.sun.star.registry.SimpleRegistry"/>
</implementation>
- <implementation name="com.sun.star.security.comp.stoc.AccessController">
+ <implementation name="com.sun.star.security.comp.stoc.AccessController"
+ constructor="com_sun_star_security_comp_stoc_AccessController">
<service name="com.sun.star.security.AccessController"/>
</implementation>
- <implementation name="com.sun.star.security.comp.stoc.FilePolicy">
+ <implementation name="com.sun.star.security.comp.stoc.FilePolicy"
+ constructor="com_sun_star_security_comp_stoc_FilePolicy">
<service name="com.sun.star.security.Policy"/>
</implementation>
</component>