summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/ImplRepo_Service/Locator_Repository.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/ImplRepo_Service/Locator_Repository.cpp')
-rw-r--r--TAO/orbsvcs/ImplRepo_Service/Locator_Repository.cpp32
1 files changed, 26 insertions, 6 deletions
diff --git a/TAO/orbsvcs/ImplRepo_Service/Locator_Repository.cpp b/TAO/orbsvcs/ImplRepo_Service/Locator_Repository.cpp
index 2d172e8734f..28224f3c804 100644
--- a/TAO/orbsvcs/ImplRepo_Service/Locator_Repository.cpp
+++ b/TAO/orbsvcs/ImplRepo_Service/Locator_Repository.cpp
@@ -6,6 +6,7 @@
#include "ACEXML/parser/parser/Parser.h"
#include "ACEXML/common/FileCharStream.h"
+#include "ACEXML/common/XML_Util.h"
ACE_RCSID (ImplRepo_Service, Locator_Repository, "$Id$")
@@ -216,11 +217,14 @@ static void saveAsXML(const ACE_CString& fname, Locator_Repository& repo) {
for (; siit.next(sientry); siit.advance()) {
Server_Info_Ptr& info = sientry->int_id_;
+ ACE_CString cmdline = ACEXML_escape_string(info->cmdline);
+ ACE_CString wdir = ACEXML_escape_string(info->dir);
+
ACE_OS::fprintf(fp,"\t<%s", Locator_XMLHandler::SERVER_INFO_TAG);
ACE_OS::fprintf(fp," name=\"%s\"", info->name.c_str());
ACE_OS::fprintf(fp," activator=\"%s\"", info->activator.c_str());
- ACE_OS::fprintf(fp," command_line=\"%s\"", info->cmdline.c_str());
- ACE_OS::fprintf(fp," working_dir=\"%s\"", info->dir.c_str());
+ ACE_OS::fprintf(fp," command_line=\"%s\"", cmdline.c_str());
+ ACE_OS::fprintf(fp," working_dir=\"%s\"", wdir.c_str());
ACE_CString amodestr = ImR_Utils::activationModeToString(info->activation_mode);
ACE_OS::fprintf(fp," activation_mode=\"%s\"", amodestr.c_str());
ACE_OS::fprintf(fp," start_limit=\"%d\"", info->start_limit);
@@ -232,7 +236,8 @@ static void saveAsXML(const ACE_CString& fname, Locator_Repository& repo) {
{
ACE_OS::fprintf(fp,"\t\t<%s", Locator_XMLHandler::ENVIRONMENT_TAG);
ACE_OS::fprintf(fp," name=\"%s\"", info->env_vars[i].name.in());
- ACE_OS::fprintf(fp," value=\"%s\"", info->env_vars[i].value.in());
+ ACE_CString val = ACEXML_escape_string(info->env_vars[i].value.in());
+ ACE_OS::fprintf(fp," value=\"%s\"", val.c_str());
ACE_OS::fprintf(fp,"/>\n");
}
@@ -263,10 +268,10 @@ Locator_Repository::Locator_Repository()
}
int
-Locator_Repository::init(Options::RepoMode rmode, const ACE_CString& name)
+Locator_Repository::init(const Options& opts)
{
- this->rmode_ = rmode;
- this->fname_ = name;
+ this->rmode_ = opts.repository_mode();
+ this->fname_ = opts.persist_file_name();
int err = 0;
switch (this->rmode_) {
@@ -276,6 +281,10 @@ Locator_Repository::init(Options::RepoMode rmode, const ACE_CString& name)
}
case Options::REPO_HEAP_FILE:
{
+ if (opts.repository_erase())
+ {
+ ACE_OS::unlink( this->fname_.c_str() );
+ }
ACE_Configuration_Heap* heap = new ACE_Configuration_Heap();
this->config_.reset(heap);
err = heap->open(this->fname_.c_str());
@@ -288,6 +297,13 @@ Locator_Repository::init(Options::RepoMode rmode, const ACE_CString& name)
#if defined (ACE_WIN32)
case Options::REPO_REGISTRY:
{
+ if (opts.repository_erase())
+ {
+ ACE_Configuration_Win32Registry config( HKEY_LOCAL_MACHINE );
+ ACE_Configuration_Section_Key root;
+ config.open_section( config.root_section(), "Software\\TAO", 0, root );
+ config.remove_section( root, "ImplementationRepository", 1 );
+ }
HKEY root = ACE_Configuration_Win32Registry::
resolve_key(HKEY_LOCAL_MACHINE, WIN32_REG_KEY);
this->config_.reset(new ACE_Configuration_Win32Registry(root));
@@ -297,6 +313,10 @@ Locator_Repository::init(Options::RepoMode rmode, const ACE_CString& name)
#endif
case Options::REPO_XML_FILE:
{
+ if (opts.repository_erase())
+ {
+ ACE_OS::unlink( this->fname_.c_str() );
+ }
err = loadAsXML(this->fname_, *this);
break;
}