diff options
author | Michi Henning <michi@zeroc.com> | 2006-09-20 02:15:23 +0000 |
---|---|---|
committer | Michi Henning <michi@zeroc.com> | 2006-09-20 02:15:23 +0000 |
commit | 8f43978db601d2851e7c156b8c0157717c2273ca (patch) | |
tree | a3e2198a50c36f28a3d3b309a0be7454fb01ecea /cpp/src | |
parent | Add Communicator::initialize() that accepts a StringSeq. (diff) | |
download | ice-8f43978db601d2851e7c156b8c0157717c2273ca.tar.bz2 ice-8f43978db601d2851e7c156b8c0157717c2273ca.tar.xz ice-8f43978db601d2851e7c156b8c0157717c2273ca.zip |
Added Communicator::initialize() that accepts a StringSeq.
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/CommunicatorI.h | 1 | ||||
-rw-r--r-- | cpp/src/Ice/Initialize.cpp | 50 |
2 files changed, 51 insertions, 0 deletions
diff --git a/cpp/src/Ice/CommunicatorI.h b/cpp/src/Ice/CommunicatorI.h index d83d90a9566..34b5057ec0e 100644 --- a/cpp/src/Ice/CommunicatorI.h +++ b/cpp/src/Ice/CommunicatorI.h @@ -70,6 +70,7 @@ private: void finishSetup(int&, char*[]); friend ICE_API CommunicatorPtr initialize(int&, char*[], const InitializationData&, Int); + friend ICE_API CommunicatorPtr initialize(StringSeq&, const InitializationData&, Int); friend ICE_API CommunicatorPtr initialize(const InitializationData&, Int); friend ICE_API ::IceInternal::InstancePtr IceInternal::getInstance(const ::Ice::CommunicatorPtr&); diff --git a/cpp/src/Ice/Initialize.cpp b/cpp/src/Ice/Initialize.cpp index 16394eaec31..b8b0af03cf5 100644 --- a/cpp/src/Ice/Initialize.cpp +++ b/cpp/src/Ice/Initialize.cpp @@ -140,6 +140,56 @@ Ice::initialize(int& argc, char* argv[], const InitializationData& initializatio } CommunicatorPtr +Ice::initialize(StringSeq& args, const InitializationData& initializationData, Int version) +{ + int origArgc; + char** argv; + + CommunicatorPtr communicator; + try + { + // + // Make a dummy argc/argv. + // (We can't use argsToStringSeq() because that requires an already initialized argv.) + // + int argc = args.size(); + origArgc = argc; + argv = new char*[args.size() + 1]; + int i; + for(i = 0; i != argc; ++i) + { + argv[i] = new char[args[i].size() + 1]; +#if defined(_MSC_VER) && (_MSC_VER >= 1400) + strcpy_s(argv[i], args[i].size() + 1, args[i].c_str()); +#else + strcpy(argv[i], args[i].c_str()); +#endif + } + argv[argc] = 0; + + communicator = initialize(argc, argv, initializationData, version); + + args = argsToStringSeq(argc, argv); + + for(i = 0; i < origArgc; ++i) + { + delete[] argv[i]; + } + delete[] argv; + } + catch(...) + { + for(int i = 0; i < origArgc; ++i) + { + delete[] argv[i]; + } + delete[] argv; + throw; + } + return communicator; +} + +CommunicatorPtr Ice::initialize(const InitializationData& initData, Int version) { // |