summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorAlan Conway <aconway@apache.org>2007-05-01 20:17:25 +0000
committerAlan Conway <aconway@apache.org>2007-05-01 20:17:25 +0000
commit53f068c1553153be0a640c9fe00278a1ee8c6f27 (patch)
treec9eca796bf3c60cc5d6a04a396cb0539f97a49bf /cpp/src
parentd7cf86d7e550d06de1e2191426105cfc7e3a280f (diff)
downloadqpid-python-53f068c1553153be0a640c9fe00278a1ee8c6f27.tar.gz
Moved parseOptions from qipdd to CommonOptions where it can be re-used.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@534226 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/qpid/CommonOptions.cpp26
-rw-r--r--cpp/src/qpid/CommonOptions.h11
-rw-r--r--cpp/src/qpidd.cpp22
3 files changed, 38 insertions, 21 deletions
diff --git a/cpp/src/qpid/CommonOptions.cpp b/cpp/src/qpid/CommonOptions.cpp
index d4db3660bd..1b08943088 100644
--- a/cpp/src/qpid/CommonOptions.cpp
+++ b/cpp/src/qpid/CommonOptions.cpp
@@ -17,10 +17,10 @@
*/
#include "CommonOptions.h"
+#include <fstream>
#include <algorithm>
namespace qpid {
-
namespace program_options {
char env2optchar(char env) {
@@ -52,5 +52,29 @@ void CommonOptions::addTo(po::options_description& desc)
("port,p", optValue(port,"PORT"), "Use PORT for AMQP connections.");
}
+void parseOptions(
+ po::options_description& desc, int argc, char** argv,
+ const std::string& configFile)
+{
+ po::variables_map vm;
+ po::store(po::parse_command_line(argc, argv, desc), vm);
+ try {
+ po::store(po::parse_environment(desc, po::env2option), vm);
+ }
+ catch (const po::error& e) {
+ throw po::error(std::string("parsing environment variables: ")
+ + e.what());
+ }
+ po::notify(vm); // So we can use the value of config.
+ try {
+ std::ifstream conf(configFile.c_str());
+ po::store(po::parse_config_file(conf, desc), vm);
+ }
+ catch (const po::error& e) {
+ throw po::error(std::string("parsing config file: ")+ e.what());
+ }
+ po::notify(vm);
+}
+
} // namespace qpid
diff --git a/cpp/src/qpid/CommonOptions.h b/cpp/src/qpid/CommonOptions.h
index beaeb114e6..e166e8f7c9 100644
--- a/cpp/src/qpid/CommonOptions.h
+++ b/cpp/src/qpid/CommonOptions.h
@@ -89,8 +89,19 @@ struct CommonOptions {
/** Add members to program_options to be updated */
void addTo(po::options_description&);
+
};
+/** Convenience function to parse an options_description.
+ * Parses argc/argv, environment variables and config file.
+ * Note the filename argument can reference a variable that
+ * is updated by argc/argv or environment variable parsing.
+ */
+void parseOptions(po::options_description&,
+ int argc, char** argv,
+ const std::string& filename=std::string());
+
+
} // namespace qpid
#endif /*!QPID_COMMONOPTIONS_H*/
diff --git a/cpp/src/qpidd.cpp b/cpp/src/qpidd.cpp
index 38289ca333..978f9afe4f 100644
--- a/cpp/src/qpidd.cpp
+++ b/cpp/src/qpidd.cpp
@@ -77,26 +77,8 @@ struct QpiddOptions : public Broker::Options
}
void parse(int argc, char* argv[]) {
- po::variables_map vm;
- // Earlier sources get precedence.
- po::store(po::parse_command_line(argc, argv, desc), vm);
- try {
- po::store(po::parse_environment(desc, po::env2option), vm);
- }
- catch (const logic_error& e) {
- throw logic_error(string("parsing environment variables: ")
- + e.what());
- }
- po::notify(vm); // So we can use the value of config.
- try {
- ifstream conf(config.c_str());
- po::store(po::parse_config_file(conf, desc), vm);
- }
- catch (const logic_error& e) {
- throw logic_error(string("parsing config file: ")+ e.what());
- }
- po::notify(vm);
- };
+ parseOptions(desc, argc, argv, config);
+ }
void usage(ostream& out) const {
out << "Usage: qpidd [OPTIONS]" << endl << endl