summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Service.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/Service.cpp')
-rw-r--r--cpp/src/Ice/Service.cpp130
1 files changed, 58 insertions, 72 deletions
diff --git a/cpp/src/Ice/Service.cpp b/cpp/src/Ice/Service.cpp
index a92b2afed95..91d0fee585f 100644
--- a/cpp/src/Ice/Service.cpp
+++ b/cpp/src/Ice/Service.cpp
@@ -537,7 +537,7 @@ Ice::Service::interrupt()
}
int
-Ice::Service::main(int& argc, char* argv[], const InitializationData& initializationData)
+Ice::Service::main(int argc, const char* const argv[], const InitializationData& initializationData, int version)
{
_name = "";
if(argc > 0)
@@ -545,6 +545,8 @@ Ice::Service::main(int& argc, char* argv[], const InitializationData& initializa
_name = argv[0];
}
+ IceUtilInternal::ArgVector av(argc, argv); // copy args
+
//
// We parse the properties here to extract Ice.ProgramName and
// Ice.EventLog.Source on Windows.
@@ -552,7 +554,7 @@ Ice::Service::main(int& argc, char* argv[], const InitializationData& initializa
InitializationData initData = initializationData;
try
{
- initData.properties = createProperties(argc, argv, initData.properties);
+ initData.properties = createProperties(av.argc, av.argv, initData.properties);
}
catch(const Ice::Exception& ex)
{
@@ -570,17 +572,17 @@ Ice::Service::main(int& argc, char* argv[], const InitializationData& initializa
string eventLogSource;
int idx = 1;
const StringConverterPtr stringConverter = getProcessStringConverter();
- while(idx < argc)
+ while(idx < av.argc)
{
- if(strcmp(argv[idx], "--service") == 0)
+ if(strcmp(av.argv[idx], "--service") == 0)
{
- if(idx + 1 >= argc)
+ if(idx + 1 >= av.argc)
{
- error("service name argument expected for `" + string(argv[idx]) + "'");
+ error("service name argument expected for `" + string(av.argv[idx]) + "'");
return EXIT_FAILURE;
}
- name = argv[idx + 1];
+ name = av.argv[idx + 1];
//
// If the process logger is the default logger then we use
@@ -594,11 +596,11 @@ Ice::Service::main(int& argc, char* argv[], const InitializationData& initializa
setProcessLogger(_logger);
}
- for(int i = idx; i + 2 < argc; ++i)
+ for(int i = idx; i + 2 < av.argc; ++i)
{
- argv[i] = argv[i + 2];
+ av.argv[i] = av.argv[i + 2];
}
- argc -= 2;
+ av.argc -= 2;
}
else
{
@@ -620,59 +622,59 @@ Ice::Service::main(int& argc, char* argv[], const InitializationData& initializa
bool changeDirectory = true;
string pidFile;
int idx = 1;
- while(idx < argc)
+ while(idx < av.argc)
{
- if(strcmp(argv[idx], "--daemon") == 0)
+ if(strcmp(av.argv[idx], "--daemon") == 0)
{
- for(int i = idx; i + 1 < argc; ++i)
+ for(int i = idx; i + 1 < av.argc; ++i)
{
- argv[i] = argv[i + 1];
+ av.argv[i] = av.argv[i + 1];
}
- argc -= 1;
+ av.argc -= 1;
daemonize = true;
}
- else if(strcmp(argv[idx], "--noclose") == 0)
+ else if(strcmp(av.argv[idx], "--noclose") == 0)
{
- for(int i = idx; i + 1 < argc; ++i)
+ for(int i = idx; i + 1 < av.argc; ++i)
{
- argv[i] = argv[i + 1];
+ av.argv[i] = av.argv[i + 1];
}
- argc -= 1;
+ av.argc -= 1;
closeFiles = false;
}
- else if(strcmp(argv[idx], "--nochdir") == 0)
+ else if(strcmp(av.argv[idx], "--nochdir") == 0)
{
- for(int i = idx; i + 1 < argc; ++i)
+ for(int i = idx; i + 1 < av.argc; ++i)
{
- argv[i] = argv[i + 1];
+ av.argv[i] = av.argv[i + 1];
}
- argc -= 1;
+ av.argc -= 1;
changeDirectory = false;
}
- else if(strcmp(argv[idx], "--pidfile") == 0)
+ else if(strcmp(av.argv[idx], "--pidfile") == 0)
{
- if(idx + 1 < argc)
+ if(idx + 1 < av.argc)
{
- pidFile = argv[idx + 1];
+ pidFile = av.argv[idx + 1];
}
else
{
- if(argv[0])
+ if(av.argv[0])
{
- consoleErr << argv[0] << ": ";
+ consoleErr << av.argv[0] << ": ";
}
consoleErr << "--pidfile must be followed by an argument" << endl;
return EXIT_FAILURE;
}
- for(int i = idx; i + 2 < argc; ++i)
+ for(int i = idx; i + 2 < av.argc; ++i)
{
- argv[i] = argv[i + 2];
+ av.argv[i] = av.argv[i + 2];
}
- argc -= 2;
+ av.argc -= 2;
}
else
{
@@ -682,9 +684,9 @@ Ice::Service::main(int& argc, char* argv[], const InitializationData& initializa
if(!closeFiles && !daemonize)
{
- if(argv[0])
+ if(av.argv[0])
{
- consoleErr << argv[0] << ": ";
+ consoleErr << av.argv[0] << ": ";
}
consoleErr << "--noclose must be used with --daemon" << endl;
return EXIT_FAILURE;
@@ -692,9 +694,9 @@ Ice::Service::main(int& argc, char* argv[], const InitializationData& initializa
if(pidFile.size() > 0 && !daemonize)
{
- if(argv[0])
+ if(av.argv[0])
{
- consoleErr << argv[0] << ": ";
+ consoleErr << av.argv[0] << ": ";
}
consoleErr << "--pidfile <file> must be used with --daemon" << endl;
return EXIT_FAILURE;
@@ -725,40 +727,22 @@ Ice::Service::main(int& argc, char* argv[], const InitializationData& initializa
}
}
- return run(argc, argv, initData);
-}
-
-int
-Ice::Service::main(int argc, char* const argv[], const InitializationData& initializationData)
-{
- IceUtilInternal::ArgVector av(argc, argv);
- return main(av.argc, av.argv, initializationData);
+ return run(av.argc, av.argv, initData, version);
}
#ifdef _WIN32
-
int
-Ice::Service::main(int& argc, wchar_t* argv[], const InitializationData& initializationData)
+Ice::Service::main(int argc, const wchar_t* const argv[], const InitializationData& initializationData, int version)
{
-
-# ifdef __MINGW32__ // COMPILER FIX
- //
- // MinGW doesn't see the main overload if we don't create the temp args object here.
- //
- Ice::StringSeq args = Ice::argsToStringSeq(argc, argv);
- return main(args, initializationData);
-# else
- return main(Ice::argsToStringSeq(argc, argv), initializationData);
-# endif
+ return main(Ice::argsToStringSeq(argc, argv), initializationData, version);
}
-
#endif
int
-Ice::Service::main(StringSeq& args, const InitializationData& initData)
+ Ice::Service::main(const StringSeq& args, const InitializationData& initData, int version)
{
IceUtilInternal::ArgVector av(args);
- return main(av.argc, av.argv, initData);
+ return main(av.argc, av.argv, initData, version);
}
Ice::CommunicatorPtr
@@ -793,23 +777,25 @@ Ice::Service::checkSystem() const
#ifdef _WIN32
int
-Ice::Service::run(int& argc, wchar_t* argv[], const InitializationData& initData)
+Ice::Service::run(int argc, const wchar_t* const argv[], const InitializationData& initData, int version)
{
StringSeq args = Ice::argsToStringSeq(argc, argv);
IceUtilInternal::ArgVector av(args);
- return run(av.argc, av.argv, initData);
+ return run(av.argc, av.argv, initData, version);
}
#endif
int
-Ice::Service::run(int& argc, char* argv[], const InitializationData& initData)
+Ice::Service::run(int argc, const char* const argv[], const InitializationData& initData, int version)
{
+ IceUtilInternal::ArgVector av(argc, argv); // copy args
+
if(_service)
{
#ifdef _WIN32
- return runService(argc, argv, initData);
+ return runService(av.argc, av.argv, initData);
#else
- return runDaemon(argc, argv, initData);
+ return runDaemon(av.argc, av.argv, initData, version);
#endif
}
@@ -830,7 +816,7 @@ Ice::Service::run(int& argc, char* argv[], const InitializationData& initData)
//
// Initialize the communicator.
//
- _communicator = initializeCommunicator(argc, argv, initData);
+ _communicator = initializeCommunicator(av.argc, av.argv, initData, version);
//
// Use the configured logger.
@@ -845,7 +831,7 @@ Ice::Service::run(int& argc, char* argv[], const InitializationData& initData)
//
// Start the service.
//
- if(start(argc, argv, status))
+ if(start(av.argc, av.argv, status))
{
//
// Wait for service shutdown.
@@ -953,9 +939,9 @@ Ice::Service::stop()
}
Ice::CommunicatorPtr
-Ice::Service::initializeCommunicator(int& argc, char* argv[], const InitializationData& initData)
+Ice::Service::initializeCommunicator(int& argc, char* argv[], const InitializationData& initData, int version)
{
- return Ice::initialize(argc, argv, initData);
+ return Ice::initialize(argc, argv, initData, version);
}
void
@@ -1067,7 +1053,7 @@ Ice::Service::disableInterrupt()
#ifdef _WIN32
int
-Ice::Service::runService(int argc, char* argv[], const InitializationData& initData)
+Ice::Service::runService(int argc, const char* const argv[], const InitializationData& initData)
{
assert(_service);
@@ -1256,7 +1242,7 @@ Ice::Service::showServiceStatus(const string& msg, SERVICE_STATUS& status)
}
void
-Ice::Service::serviceMain(int argc, wchar_t* argv[])
+Ice::Service::serviceMain(int argc, const wchar_t* const argv[])
{
_ctrlCHandler = new IceUtil::CtrlCHandler;
@@ -1306,7 +1292,7 @@ Ice::Service::serviceMain(int argc, wchar_t* argv[])
//
try
{
- _communicator = initializeCommunicator(argc, args, _initData);
+ _communicator = initializeCommunicator(argc, args, _initData, ICE_INT_VERSION);
}
catch(const Ice::Exception& ex)
{
@@ -1504,7 +1490,7 @@ ServiceStatusManager::run()
#else
int
-Ice::Service::runDaemon(int argc, char* argv[], const InitializationData& initData)
+Ice::Service::runDaemon(int argc, char* argv[], const InitializationData& initData, int version)
{
assert(_service);
@@ -1702,7 +1688,7 @@ Ice::Service::runDaemon(int argc, char* argv[], const InitializationData& initDa
//
// Initialize the communicator.
//
- _communicator = initializeCommunicator(argc, argv, initData);
+ _communicator = initializeCommunicator(argc, argv, initData, version);
if(_closeFiles)
{