diff options
-rw-r--r-- | cpp/demo/Ice/converter/Client.cpp | 4 | ||||
-rw-r--r-- | cpp/demo/Ice/converter/config.client | 5 | ||||
-rw-r--r-- | cpp/include/Ice/Initialize.h | 6 | ||||
-rw-r--r-- | cpp/src/Ice/Initialize.cpp | 14 | ||||
-rw-r--r-- | cpp/src/Ice/PropertiesI.cpp | 29 | ||||
-rw-r--r-- | cpp/src/Ice/PropertiesI.h | 14 |
6 files changed, 47 insertions, 25 deletions
diff --git a/cpp/demo/Ice/converter/Client.cpp b/cpp/demo/Ice/converter/Client.cpp index 087947cbc83..ba31c755613 100644 --- a/cpp/demo/Ice/converter/Client.cpp +++ b/cpp/demo/Ice/converter/Client.cpp @@ -55,7 +55,7 @@ run(int argc, char* argv[], const Ice::CommunicatorPtr& communicator1, const Ice menu(); - string greeting = "Bonne journ\351e"; + string greeting = properties->getProperty("Send.String"); char c; do @@ -117,7 +117,7 @@ main(int argc, char* argv[]) // Ice::InitializationData initData; initData.stringConverter = new StringConverterI(); - initData.properties = Ice::createProperties(); + initData.properties = Ice::createProperties(initData.stringConverter); initData.properties->load("config.client"); communicator1 = Ice::initialize(argc, argv, initData); diff --git a/cpp/demo/Ice/converter/config.client b/cpp/demo/Ice/converter/config.client index 8079e7ced47..eb927c44f76 100644 --- a/cpp/demo/Ice/converter/config.client +++ b/cpp/demo/Ice/converter/config.client @@ -5,6 +5,11 @@ Hello.Proxy=hello:tcp -p 10000 # +# The string the demo sends +# +Send.String=Bonne journée + +# # Warn about connection exceptions # Ice.Warn.Connections=1 diff --git a/cpp/include/Ice/Initialize.h b/cpp/include/Ice/Initialize.h index d95cf3ee2a5..924bc3b40cf 100644 --- a/cpp/include/Ice/Initialize.h +++ b/cpp/include/Ice/Initialize.h @@ -33,9 +33,9 @@ ICE_API StringSeq argsToStringSeq(int, char*[]); // ICE_API void stringSeqToArgs(const StringSeq&, int&, char*[]); -ICE_API PropertiesPtr createProperties(); -ICE_API PropertiesPtr createProperties(StringSeq&, const PropertiesPtr& = 0); -ICE_API PropertiesPtr createProperties(int&, char*[], const PropertiesPtr& = 0); +ICE_API PropertiesPtr createProperties(const StringConverterPtr& = 0); +ICE_API PropertiesPtr createProperties(StringSeq&, const PropertiesPtr& = 0, const StringConverterPtr& = 0); +ICE_API PropertiesPtr createProperties(int&, char*[], const PropertiesPtr& = 0, const StringConverterPtr& = 0); // // This class is used to notify user of when Ice threads diff --git a/cpp/src/Ice/Initialize.cpp b/cpp/src/Ice/Initialize.cpp index 292b16892cc..16394eaec31 100644 --- a/cpp/src/Ice/Initialize.cpp +++ b/cpp/src/Ice/Initialize.cpp @@ -83,22 +83,22 @@ Ice::stringSeqToArgs(const StringSeq& args, int& argc, char* argv[]) } PropertiesPtr -Ice::createProperties() +Ice::createProperties(const StringConverterPtr& converter) { - return new PropertiesI(); + return new PropertiesI(converter); } PropertiesPtr -Ice::createProperties(StringSeq& args, const PropertiesPtr& defaults) +Ice::createProperties(StringSeq& args, const PropertiesPtr& defaults, const StringConverterPtr& converter) { - return new PropertiesI(args, defaults); + return new PropertiesI(args, defaults, converter); } PropertiesPtr -Ice::createProperties(int& argc, char* argv[], const PropertiesPtr& defaults) +Ice::createProperties(int& argc, char* argv[], const PropertiesPtr& defaults, const StringConverterPtr& converter) { StringSeq args = argsToStringSeq(argc, argv); - PropertiesPtr properties = createProperties(args, defaults); + PropertiesPtr properties = createProperties(args, defaults, converter); stringSeqToArgs(args, argc, argv); return properties; } @@ -131,7 +131,7 @@ Ice::initialize(int& argc, char* argv[], const InitializationData& initializatio checkIceVersion(version); InitializationData initData = initializationData; - initData.properties = createProperties(argc, argv, initData.properties); + initData.properties = createProperties(argc, argv, initData.properties, initData.stringConverter); CommunicatorI* communicatorI = new CommunicatorI(initData); CommunicatorPtr result = communicatorI; // For exception safety. diff --git a/cpp/src/Ice/PropertiesI.cpp b/cpp/src/Ice/PropertiesI.cpp index b1dc6c20128..7030dd34114 100644 --- a/cpp/src/Ice/PropertiesI.cpp +++ b/cpp/src/Ice/PropertiesI.cpp @@ -185,7 +185,7 @@ Ice::PropertiesI::parseCommandLineOptions(const string& prefix, const StringSeq& opt += "=1"; } - parseLine(opt.substr(2)); + parseLine(opt.substr(2), 0); } else { @@ -222,7 +222,7 @@ Ice::PropertiesI::load(const std::string& file) char line[1024]; while(in.getline(line, 1024)) { - parseLine(line); + parseLine(line, _converter); } } @@ -234,15 +234,18 @@ Ice::PropertiesI::clone() } Ice::PropertiesI::PropertiesI(const PropertiesI* p) : - _properties(p->_properties) + _properties(p->_properties), + _converter(p->_converter) { } -Ice::PropertiesI::PropertiesI() +Ice::PropertiesI::PropertiesI(const StringConverterPtr& converter) : + _converter(converter) { } -Ice::PropertiesI::PropertiesI(StringSeq& args, const PropertiesPtr& defaults) +Ice::PropertiesI::PropertiesI(StringSeq& args, const PropertiesPtr& defaults, const StringConverterPtr& converter) : + _converter(converter) { if(defaults != 0) { @@ -273,7 +276,7 @@ Ice::PropertiesI::PropertiesI(StringSeq& args, const PropertiesPtr& defaults) { s += "=1"; } - parseLine(s.substr(2)); + parseLine(s.substr(2), 0); loadConfigFiles = true; } else @@ -302,7 +305,7 @@ Ice::PropertiesI::PropertiesI(StringSeq& args, const PropertiesPtr& defaults) void -Ice::PropertiesI::parseLine(const string& line) +Ice::PropertiesI::parseLine(const string& line, const StringConverterPtr& converter) { const string delim = " \t\r\n"; string s = line; @@ -347,6 +350,18 @@ Ice::PropertiesI::parseLine(const string& line) end = s.length(); value = s.substr(beg, end - beg); } + + if(converter) + { + string tmp; + converter->fromUTF8(reinterpret_cast<const Byte*>(key.data()), + reinterpret_cast<const Byte*>(key.data() + key.size()), tmp); + key.swap(tmp); + + converter->fromUTF8(reinterpret_cast<const Byte*>(value.data()), + reinterpret_cast<const Byte*>(value.data() + value.size()), tmp); + value.swap(tmp); + } setProperty(key, value); } diff --git a/cpp/src/Ice/PropertiesI.h b/cpp/src/Ice/PropertiesI.h index 0a8a5622daa..ce94d4dc25f 100644 --- a/cpp/src/Ice/PropertiesI.h +++ b/cpp/src/Ice/PropertiesI.h @@ -12,6 +12,7 @@ #include <IceUtil/Mutex.h> #include <Ice/Properties.h> +#include <Ice/StringConverter.h> namespace Ice { @@ -33,20 +34,21 @@ public: virtual PropertiesPtr clone(); private: - PropertiesI(); - PropertiesI(StringSeq&, const PropertiesPtr&); + PropertiesI(const StringConverterPtr&); + PropertiesI(StringSeq&, const PropertiesPtr&, const StringConverterPtr&); PropertiesI(const PropertiesI*); - friend ICE_API PropertiesPtr createProperties(); - friend ICE_API PropertiesPtr createProperties(StringSeq&, const PropertiesPtr&); - friend ICE_API PropertiesPtr createProperties(int&, char*[], const PropertiesPtr&); + friend ICE_API PropertiesPtr createProperties(const StringConverterPtr&); + friend ICE_API PropertiesPtr createProperties(StringSeq&, const PropertiesPtr&, const StringConverterPtr&); + friend ICE_API PropertiesPtr createProperties(int&, char*[], const PropertiesPtr&, const StringConverterPtr&); - void parseLine(const std::string&); + void parseLine(const std::string&, const StringConverterPtr&); void loadConfig(); std::map<std::string, std::string> _properties; + const StringConverterPtr _converter; }; } |