summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/Ice/DeprecatedStringConverter.cpp32
-rw-r--r--cpp/src/Ice/Instance.cpp49
-rw-r--r--cpp/src/Ice/Instance.h9
-rw-r--r--cpp/src/Ice/StringConverterPlugin.cpp57
4 files changed, 63 insertions, 84 deletions
diff --git a/cpp/src/Ice/DeprecatedStringConverter.cpp b/cpp/src/Ice/DeprecatedStringConverter.cpp
index fd87c2f7e86..308607c54ea 100644
--- a/cpp/src/Ice/DeprecatedStringConverter.cpp
+++ b/cpp/src/Ice/DeprecatedStringConverter.cpp
@@ -10,27 +10,51 @@
#include <Ice/DeprecatedStringConverter.h>
#include <Ice/Initialize.h>
#include <Ice/Instance.h>
+#include <IceUtil/StringConverter.h>
+
+namespace Ice
+{
+
+StringConverterPlugin::StringConverterPlugin(const CommunicatorPtr& /*notused*/,
+ const StringConverterPtr& stringConverter,
+ const WstringConverterPtr& wstringConverter)
+{
+ IceUtil::setProcessStringConverter(stringConverter);
+ IceUtil::setProcessWstringConverter(wstringConverter);
+}
+
+void StringConverterPlugin::initialize()
+{
+ // no op
+}
+
+void StringConverterPlugin::destroy()
+{
+ // no op
+}
std::string
-Ice::nativeToUTF8(const Ice::StringConverterPtr& converter, const std::string& s)
+nativeToUTF8(const StringConverterPtr& converter, const std::string& s)
{
return IceUtil::nativeToUTF8(s, converter);
}
std::string
-Ice::nativeToUTF8(const Ice::CommunicatorPtr& communicator, const std::string& s)
+nativeToUTF8(const CommunicatorPtr& communicator, const std::string& s)
{
return IceUtil::nativeToUTF8(s, IceInternal::getInstance(communicator)->getStringConverter());
}
std::string
-Ice::UTF8toNative(const Ice::StringConverterPtr& converter, const std::string& s)
+UTF8toNative(const StringConverterPtr& converter, const std::string& s)
{
return IceUtil::UTF8ToNative(s, converter);
}
std::string
-Ice::UTF8ToNative(const Ice::CommunicatorPtr& communicator, const std::string& s)
+UTF8ToNative(const CommunicatorPtr& communicator, const std::string& s)
{
return IceUtil::UTF8ToNative(s, IceInternal::getInstance(communicator)->getStringConverter());
}
+
+}
diff --git a/cpp/src/Ice/Instance.cpp b/cpp/src/Ice/Instance.cpp
index 46e86c10b3e..d45c0b9e758 100644
--- a/cpp/src/Ice/Instance.cpp
+++ b/cpp/src/Ice/Instance.cpp
@@ -1012,31 +1012,6 @@ IceInternal::Instance::setDefaultRouter(const Ice::RouterPrx& defaultRouter)
}
void
-IceInternal::Instance::setStringConverter(const IceUtil::StringConverterPtr& stringConverter)
-{
- //
- // No locking, as it can only be called during plug-in loading
- //
- _stringConverter = stringConverter;
-}
-
-void
-IceInternal::Instance::setWstringConverter(const IceUtil::WstringConverterPtr& wstringConverter)
-{
- //
- // No locking, as it can only be called during plug-in loading
- //
- if(wstringConverter == 0)
- {
- _wstringConverter = new IceUtil::UnicodeWstringConverter;
- }
- else
- {
- _wstringConverter = wstringConverter;
- }
-}
-
-void
IceInternal::Instance::setLogger(const Ice::LoggerPtr& logger)
{
//
@@ -1360,11 +1335,14 @@ IceInternal::Instance::Instance(const CommunicatorPtr& communicator, const Initi
_retryQueue = new RetryQueue(this);
- if(_wstringConverter == 0)
+ //
+ // When _wstringConverter isn't set, use the default Unicode wstring converter
+ //
+ if(!_wstringConverter)
{
- _wstringConverter = new IceUtil::UnicodeWstringConverter();
+ _wstringConverter = new IceUtil::UnicodeWstringConverter;
}
-
+
__setNoDelete(false);
}
catch(...)
@@ -1434,6 +1412,21 @@ IceInternal::Instance::finishSetup(int& argc, char* argv[], const Ice::Communica
pluginManagerImpl->loadPlugins(argc, argv);
//
+ // Reset _stringConverter and _wstringConverter, in case a plugin changed them
+ //
+ _stringConverter = IceUtil::getProcessStringConverter();
+
+ IceUtil::WstringConverterPtr newWstringConverter = IceUtil::getProcessWstringConverter();
+ if(newWstringConverter)
+ {
+ _wstringConverter = newWstringConverter;
+ }
+ else if(!dynamic_cast<IceUtil::UnicodeWstringConverter*>(_wstringConverter.get()))
+ {
+ _wstringConverter = new IceUtil::UnicodeWstringConverter;
+ }
+
+ //
// Create Admin facets, if enabled.
//
// Note that any logger-dependent admin facet must be created after we load all plugins,
diff --git a/cpp/src/Ice/Instance.h b/cpp/src/Ice/Instance.h
index 901685c620f..c4047d1d0b4 100644
--- a/cpp/src/Ice/Instance.h
+++ b/cpp/src/Ice/Instance.h
@@ -108,15 +108,12 @@ public:
void setDefaultLocator(const Ice::LocatorPrx&);
void setDefaultRouter(const Ice::RouterPrx&);
- IceUtil::StringConverterPtr getStringConverter() const { return _stringConverter; }
- void setStringConverter(const IceUtil::StringConverterPtr&);
-
- IceUtil::WstringConverterPtr getWstringConverter() const { return _wstringConverter; }
- void setWstringConverter(const IceUtil::WstringConverterPtr&);
-
void setLogger(const Ice::LoggerPtr&);
void setThreadHook(const Ice::ThreadNotificationPtr&);
+ IceUtil::StringConverterPtr getStringConverter() const { return _stringConverter; }
+ IceUtil::WstringConverterPtr getWstringConverter() const { return _wstringConverter; }
+
private:
Instance(const Ice::CommunicatorPtr&, const Ice::InitializationData&);
diff --git a/cpp/src/Ice/StringConverterPlugin.cpp b/cpp/src/Ice/StringConverterPlugin.cpp
index de58b679e33..db62f91f334 100644
--- a/cpp/src/Ice/StringConverterPlugin.cpp
+++ b/cpp/src/Ice/StringConverterPlugin.cpp
@@ -9,59 +9,24 @@
#include <Ice/Config.h>
+// For deprecated StringConverterPlugin
+#include <IceUtil/DisableWarnings.h>
+#include <Ice/DeprecatedStringConverter.h>
+
#include <IceUtil/IceUtil.h>
#include <IceUtil/StringUtil.h>
-#include <Ice/Plugin.h>
+#include <Ice/Communicator.h>
#include <Ice/Initialize.h>
-#include <Ice/Instance.h>
#include <Ice/LocalException.h>
#include <Ice/LoggerUtil.h>
-#include <Ice/Communicator.h>
-using namespace IceUtil;
using namespace IceUtilInternal;
using namespace Ice;
using namespace std;
-
-namespace
-{
-
-class StringConverterPlugin : public Ice::Plugin
-{
-public:
-
- StringConverterPlugin(const CommunicatorPtr& communicator,
- const StringConverterPtr& stringConverter,
- const WstringConverterPtr& wstringConverter)
- {
- if(communicator == 0)
- {
- throw PluginInitializationException(__FILE__, __LINE__, "Communicator cannot be null");
- }
-
- IceInternal::InstancePtr instance = IceInternal::getInstance(communicator);
-
- IceUtil::setProcessStringConverter(stringConverter);
- instance->setStringConverter(stringConverter);
- IceUtil::setProcessWstringConverter(wstringConverter);
- instance->setWstringConverter(wstringConverter);
- }
-
- virtual void initialize()
- {
- }
-
- virtual void destroy()
- {
- }
-};
-
-}
-
//
-// The entry point for the "string converter" plug-in built-in the Ice library
+// The entry point for the string converter plugin built-in the Ice library
//
extern "C"
{
@@ -113,7 +78,7 @@ createStringConverter(const CommunicatorPtr& communicator, const string& name, c
return 0;
}
- stringConverter = new WindowsStringConverter(static_cast<unsigned int>(cp));
+ stringConverter = new IceUtil::WindowsStringConverter(static_cast<unsigned int>(cp));
#else
StringSeq iconvArgs;
@@ -140,18 +105,18 @@ createStringConverter(const CommunicatorPtr& communicator, const string& name, c
{
case 0:
{
- stringConverter = new IconvStringConverter<char>;
+ stringConverter = new IceUtil::IconvStringConverter<char>;
break;
}
case 1:
{
- stringConverter = new IconvStringConverter<char>(iconvArgs[0].c_str());
+ stringConverter = new IceUtil::IconvStringConverter<char>(iconvArgs[0].c_str());
break;
}
case 2:
{
- stringConverter = new IconvStringConverter<char>(iconvArgs[0].c_str());
- wstringConverter = new IconvStringConverter<wchar_t>(iconvArgs[1].c_str());
+ stringConverter = new IceUtil::IconvStringConverter<char>(iconvArgs[0].c_str());
+ wstringConverter = new IceUtil::IconvStringConverter<wchar_t>(iconvArgs[1].c_str());
break;
}
default: