summaryrefslogtreecommitdiff
path: root/cpp/src/IcePack/ActivatorI.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2002-11-07 21:23:04 +0000
committerBenoit Foucher <benoit@zeroc.com>2002-11-07 21:23:04 +0000
commite6438833bb03ae2830387b438573a3af751f0f61 (patch)
treed376b94c6edad4087a2e733865c5eced17585fb7 /cpp/src/IcePack/ActivatorI.cpp
parentfixes (diff)
downloadice-e6438833bb03ae2830387b438573a3af751f0f61.tar.bz2
ice-e6438833bb03ae2830387b438573a3af751f0f61.tar.xz
ice-e6438833bb03ae2830387b438573a3af751f0f61.zip
Added IcePack.Node.PropertiesOverride property to pass additional or
override server properties. Changed the test suite to use this new of this option.
Diffstat (limited to 'cpp/src/IcePack/ActivatorI.cpp')
-rw-r--r--cpp/src/IcePack/ActivatorI.cpp46
1 files changed, 44 insertions, 2 deletions
diff --git a/cpp/src/IcePack/ActivatorI.cpp b/cpp/src/IcePack/ActivatorI.cpp
index 4d23481000d..76cb1f88aa5 100644
--- a/cpp/src/IcePack/ActivatorI.cpp
+++ b/cpp/src/IcePack/ActivatorI.cpp
@@ -72,6 +72,41 @@ IcePack::ActivatorI::ActivatorI(const TraceLevelsPtr& traceLevels, const Propert
int flags = fcntl(_fdIntrRead, F_GETFL);
flags |= O_NONBLOCK;
fcntl(_fdIntrRead, F_SETFL, flags);
+
+ //
+ // Parse the properties override property.
+ //
+ string props = _properties->getProperty("IcePack.Node.PropertiesOverride");
+ if(!props.empty())
+ {
+ string::size_type end = 0;
+ while(end != string::npos)
+ {
+ const string delim = " \t\r\n";
+
+ string::size_type beg = props.find_first_not_of(delim, end);
+ if(beg == string::npos)
+ {
+ break;
+ }
+
+ end = props.find_first_of(delim, beg);
+ string arg;
+ if(end == string::npos)
+ {
+ arg = props.substr(beg);
+ }
+ else
+ {
+ arg = props.substr(beg, end - beg);
+ }
+ if(arg.find("--") != 0)
+ {
+ arg = "--" + arg;
+ }
+ _propertiesOverride.push_back(arg);
+ }
+ }
}
IcePack::ActivatorI::~ActivatorI()
@@ -127,19 +162,26 @@ IcePack::ActivatorI::activate(const ServerPtr& server)
pwd.erase(pos, 2);
}
}
-
+
//
// Compute arguments.
//
- int argc = server->description.theArgs.size() + 3;
+ int argc = server->description.theArgs.size() + _propertiesOverride.size() + 3;
char** argv = static_cast<char**>(malloc(argc * sizeof(char*)));
argv[0] = strdup(path.c_str());
+
unsigned int i = 0;
vector<string>::const_iterator q;
+
for(q = server->description.theArgs.begin(); q != server->description.theArgs.end(); ++q, ++i)
{
argv[i + 1] = strdup(q->c_str());
}
+ for(q = _propertiesOverride.begin(); q != _propertiesOverride.end(); ++q, ++i)
+ {
+ argv[i + 1] = strdup(q->c_str());
+ }
+
string locatorArg = "--Ice.Default.Locator=" + _properties->getProperty("Ice.Default.Locator");
argv[argc - 2] = strdup(locatorArg.c_str());
argv[argc - 1] = 0;