summaryrefslogtreecommitdiff
path: root/cpp/lib/common
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/lib/common')
-rw-r--r--cpp/lib/common/CommonOptions.cpp20
-rw-r--r--cpp/lib/common/CommonOptions.h5
2 files changed, 25 insertions, 0 deletions
diff --git a/cpp/lib/common/CommonOptions.cpp b/cpp/lib/common/CommonOptions.cpp
index 8efb3a6baa..d4db3660bd 100644
--- a/cpp/lib/common/CommonOptions.cpp
+++ b/cpp/lib/common/CommonOptions.cpp
@@ -17,9 +17,29 @@
*/
#include "CommonOptions.h"
+#include <algorithm>
namespace qpid {
+namespace program_options {
+
+char env2optchar(char env) {
+ return (env=='_') ? '-' : tolower(env);
+}
+
+const std::string envPrefix("QPID_");
+
+std::string env2option(const std::string& env) {
+ if (env.find(envPrefix) ==0) {
+ std::string opt = env.substr(envPrefix.size());
+ std::transform(opt.begin(), opt.end(), opt.begin(), env2optchar);
+ return opt;
+ }
+ return std::string();
+}
+
+} // namespace program_options
+
const int CommonOptions::DEFAULT_PORT=5672;
CommonOptions::CommonOptions() : trace(false), port(DEFAULT_PORT) {}
diff --git a/cpp/lib/common/CommonOptions.h b/cpp/lib/common/CommonOptions.h
index 2a4b9798cd..beaeb114e6 100644
--- a/cpp/lib/common/CommonOptions.h
+++ b/cpp/lib/common/CommonOptions.h
@@ -62,6 +62,11 @@ value_semantic* optValue(T& value, const char* arg) {
return new OptionValue<T>(value, argName);
}
+/** Environment-to-option name mapping.
+ * Maps env variable "QPID_SOME_VAR" to option "some-var"
+ */
+std::string env2option(const std::string& env);
+
/**
* Like boost::program_options::bool_switch but takes reference, not pointer.
*/