ConfigFileReader enables runtime 'reload' of .conf files.
However, if the environment variable is surrounded by quotes,
it adds the quotes to the value which is not the expected behaviour.

export FOO="foo"

FOO should contain just foo, not "foo".
---
 src/base/config_file_reader.cc  | 15 +++++++++++++++
 src/osaf/consensus/consensus.cc |  1 +
 2 files changed, 16 insertions(+)

diff --git a/src/base/config_file_reader.cc b/src/base/config_file_reader.cc
index 63cad7d..0132547 100644
--- a/src/base/config_file_reader.cc
+++ b/src/base/config_file_reader.cc
@@ -36,6 +36,18 @@ static void trim(std::string& str) {
   right_trim(str);
 }
 
+static void strip_quotes(std::string& str) {
+  // trim leading and trailing quotes
+  if (str.front() == '"' ||
+      str.front() == '\'') {
+    str.erase(0, 1);  // delete first char
+  }
+  if (str.back() == '"' ||
+    str.back() == '\'') {
+    str.pop_back();  // delete last char
+  }
+}
+
 ConfigFileReader::SettingsMap ConfigFileReader::ParseFile(
     const std::string& filename) {
   const std::string prefix("export");
@@ -80,6 +92,9 @@ ConfigFileReader::SettingsMap ConfigFileReader::ParseFile(
       std::string value = line.substr(equal + 1);
       trim(value);
 
+      strip_quotes(key);
+      strip_quotes(value);
+
       map[key] = value;
     }
     file.close();
diff --git a/src/osaf/consensus/consensus.cc b/src/osaf/consensus/consensus.cc
index 480f7d2..0bebab2 100644
--- a/src/osaf/consensus/consensus.cc
+++ b/src/osaf/consensus/consensus.cc
@@ -295,6 +295,7 @@ bool Consensus::ReloadConfiguration() {
       continue;
     }
     int rc;
+    TRACE("Setting '%s' to '%s'", kv.first.c_str(), kv.second.c_str());
     rc = setenv(kv.first.c_str(), kv.second.c_str(), 1);
     osafassert(rc == 0);
   }
-- 
2.7.4



_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to