summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Initialize.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/Initialize.cpp')
-rw-r--r--cpp/src/Ice/Initialize.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/cpp/src/Ice/Initialize.cpp b/cpp/src/Ice/Initialize.cpp
index 3c0520480e0..69444ff17cb 100644
--- a/cpp/src/Ice/Initialize.cpp
+++ b/cpp/src/Ice/Initialize.cpp
@@ -9,6 +9,7 @@
#include <IceUtil/DisableWarnings.h>
#include <IceUtil/ArgVector.h>
+#include <IceUtil/StringUtil.h>
#include <Ice/GC.h>
#include <Ice/CommunicatorI.h>
#include <Ice/PropertiesI.h>
@@ -149,18 +150,32 @@ inline void checkIceVersion(Int version)
#endif
}
+CommunicatorPtr
+Ice::initialize(int& argc, char**& argv, const InitializationData& initializationData, Int version)
+{
+ int argcCopy = argc;
+ CommunicatorPtr result = initialize(argcCopy, const_cast<const char**>(argv), argc, argv, initializationData, version);
+ return result;
+}
CommunicatorPtr
-Ice::initialize(int& argc, char* argv[], const InitializationData& initializationData, Int version)
+Ice::initialize(int argc, const char* argv[], int& newArgc, char**& newArgv, const InitializationData& initializationData, Int version)
{
+
checkIceVersion(version);
InitializationData initData = initializationData;
- initData.properties = createProperties(argc, argv, initData.properties, initData.stringConverter);
+ int argcCopy = argc;
+ char** argvCopy = IceUtilInternal::dupArgv(argv);
+ initData.properties = createProperties(argcCopy, argvCopy, initData.properties, initData.stringConverter);
CommunicatorI* communicatorI = new CommunicatorI(initData);
CommunicatorPtr result = communicatorI; // For exception safety.
- communicatorI->finishSetup(argc, argv);
+ communicatorI->finishSetup(argcCopy, argvCopy);
+
+ newArgc = argcCopy;
+ newArgv = argvCopy;
+
return result;
}