diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/DeprecatedStringConverter.cpp | 32 | ||||
-rw-r--r-- | cpp/src/Ice/Instance.cpp | 49 | ||||
-rw-r--r-- | cpp/src/Ice/Instance.h | 9 | ||||
-rw-r--r-- | cpp/src/Ice/StringConverterPlugin.cpp | 57 |
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: |