diff options
author | Dwayne Boone <dwayne@zeroc.com> | 2006-06-14 15:21:28 +0000 |
---|---|---|
committer | Dwayne Boone <dwayne@zeroc.com> | 2006-06-14 15:21:28 +0000 |
commit | 5fd82af799b04cf3e38bbb69a2f8fff14f951fca (patch) | |
tree | 994849b82bfc0e0a362a8dcd9e68fbeca48e1943 /cpp/src | |
parent | minor changes to test harness (diff) | |
download | ice-5fd82af799b04cf3e38bbb69a2f8fff14f951fca.tar.bz2 ice-5fd82af799b04cf3e38bbb69a2f8fff14f951fca.tar.xz ice-5fd82af799b04cf3e38bbb69a2f8fff14f951fca.zip |
Bug 923 - read config as UTF8 and convert using string converter
Diffstat (limited to 'cpp/src')
-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 |
3 files changed, 37 insertions, 20 deletions
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; }; } |