summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
authorMichi Henning <michi@zeroc.com>2006-09-20 02:15:23 +0000
committerMichi Henning <michi@zeroc.com>2006-09-20 02:15:23 +0000
commit8f43978db601d2851e7c156b8c0157717c2273ca (patch)
treea3e2198a50c36f28a3d3b309a0be7454fb01ecea /cpp
parentAdd Communicator::initialize() that accepts a StringSeq. (diff)
downloadice-8f43978db601d2851e7c156b8c0157717c2273ca.tar.bz2
ice-8f43978db601d2851e7c156b8c0157717c2273ca.tar.xz
ice-8f43978db601d2851e7c156b8c0157717c2273ca.zip
Added Communicator::initialize() that accepts a StringSeq.
Diffstat (limited to 'cpp')
-rw-r--r--cpp/include/Ice/Initialize.h3
-rw-r--r--cpp/src/Ice/CommunicatorI.h1
-rw-r--r--cpp/src/Ice/Initialize.cpp50
3 files changed, 54 insertions, 0 deletions
diff --git a/cpp/include/Ice/Initialize.h b/cpp/include/Ice/Initialize.h
index 30d7d604988..9fbf7a23825 100644
--- a/cpp/include/Ice/Initialize.h
+++ b/cpp/include/Ice/Initialize.h
@@ -68,6 +68,9 @@ struct InitializationData
ICE_API CommunicatorPtr initialize(int&, char*[], const InitializationData& = InitializationData(),
Int = ICE_INT_VERSION);
+ICE_API CommunicatorPtr initialize(Ice::StringSeq&, const InitializationData& = InitializationData(),
+ Int = ICE_INT_VERSION);
+
ICE_API CommunicatorPtr initialize(const InitializationData& = InitializationData(),
Int = ICE_INT_VERSION);
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)
{
//