summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrzej Rybczak <electricityispower@gmail.com>2015-05-02 21:16:11 +0200
committerAndrzej Rybczak <electricityispower@gmail.com>2015-05-02 21:16:11 +0200
commita40508179a9ef4601415c167abe04432038e82ce (patch)
treea1e5565eb4d792525b2a9c998244cf2dec76b0bb
parent77c702100f8ab296a44966f756f98b37a6dc4dd3 (diff)
configuration: add 'ignore-config-errors' switch0.6.4
-rw-r--r--NEWS1
-rw-r--r--src/configuration.cpp3
-rw-r--r--src/settings.cpp4
-rw-r--r--src/settings.h2
-rw-r--r--src/utility/option_parser.cpp11
-rw-r--r--src/utility/option_parser.h2
6 files changed, 14 insertions, 9 deletions
diff --git a/NEWS b/NEWS
index d33225d0..e803dc97 100644
--- a/NEWS
+++ b/NEWS
@@ -3,6 +3,7 @@ ncmpcpp-0.6.4 (2015-05-02)
* Fix title of a pop-up which shows during adding selected items to the current playlist.
* Correctly deal with leading separator while parsing filenames in tag editor.
* Fix initial incorrect window size that was occuring in some cases.
+* Unknown and invalid configuration options can now be ignored using command line option 'ignore-config-errors'.
ncmpcpp-0.6.3 (2015-03-02)
diff --git a/src/configuration.cpp b/src/configuration.cpp
index d44ba4fa..05cb338e 100644
--- a/src/configuration.cpp
+++ b/src/configuration.cpp
@@ -54,6 +54,7 @@ bool configure(int argc, char **argv)
("host,h", po::value<std::string>()->default_value("localhost"), "connect to server at host")
("port,p", po::value<int>()->default_value(6600), "connect to server at port")
("config,c", po::value<std::string>(&config_path)->default_value("~/.ncmpcpp/config"), "specify configuration file")
+ ("ignore-config-errors", po::value<bool>()->default_value(false), "ignore unknown and invalid options in configuration file")
("bindings,b", po::value<std::string>(&bindings_path)->default_value("~/.ncmpcpp/bindings"), "specify bindings file")
("screen,s", po::value<std::string>(), "specify initial screen")
("help,?", "show help message")
@@ -130,7 +131,7 @@ bool configure(int argc, char **argv)
// read configuration
expand_home(config_path);
- if (Config.read(config_path) == false)
+ if (Config.read(config_path, vm["ignore-config-errors"].as<bool>()) == false)
exit(1);
// if bindings file was not specified, use the one from main directory.
diff --git a/src/settings.cpp b/src/settings.cpp
index aa38d70d..b044f558 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -179,7 +179,7 @@ option_parser::worker buffer(NC::Buffer &arg, ValueT &&value, TransformT &&map)
}
-bool Configuration::read(const std::string &config_path)
+bool Configuration::read(const std::string &config_path, bool ignore_errors)
{
std::string mpd_host;
unsigned mpd_port;
@@ -640,5 +640,5 @@ bool Configuration::read(const std::string &config_path)
));
std::ifstream f(config_path);
- return p.run(f);
+ return p.run(f, ignore_errors);
}
diff --git a/src/settings.h b/src/settings.h
index 01959da8..52523ee4 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -51,7 +51,7 @@ struct Configuration
: playlist_disable_highlight_delay(0), visualizer_sync_interval(0)
{ }
- bool read(const std::string &config_path);
+ bool read(const std::string &config_path, bool ignore_errors);
std::string ncmpcpp_directory;
std::string lyrics_directory;
diff --git a/src/utility/option_parser.cpp b/src/utility/option_parser.cpp
index 21f4cbd6..029c23c6 100644
--- a/src/utility/option_parser.cpp
+++ b/src/utility/option_parser.cpp
@@ -35,7 +35,7 @@
#include "utility/option_parser.h"
-bool option_parser::run(std::istream &is)
+bool option_parser::run(std::istream &is, bool ignore_errors)
{
// quoted value. leftmost and rightmost quotation marks are the delimiters.
boost::regex quoted("(\\w+)\\h*=\\h*\"(.*)\"[^\"]*");
@@ -56,13 +56,15 @@ bool option_parser::run(std::istream &is)
it->second.parse(match[2]);
} catch (std::exception &e) {
std::cerr << "Error while processing option \"" << option << "\": " << e.what() << "\n";
- return false;
+ if (!ignore_errors)
+ return false;
}
}
else
{
std::cerr << "Unknown option: " << option << "\n";
- return false;
+ if (!ignore_errors)
+ return false;
}
}
}
@@ -74,7 +76,8 @@ bool option_parser::run(std::istream &is)
p.second.run_default();
} catch (std::exception &e) {
std::cerr << "Error while finalizing option \"" << p.first << "\": " << e.what() << "\n";
- return false;
+ if (ignore_errors)
+ return false;
}
}
}
diff --git a/src/utility/option_parser.h b/src/utility/option_parser.h
index 6b366bd9..7a326d62 100644
--- a/src/utility/option_parser.h
+++ b/src/utility/option_parser.h
@@ -129,7 +129,7 @@ struct option_parser
m_parsers[option] = std::forward<WorkerT>(w);
}
- bool run(std::istream &is);
+ bool run(std::istream &is, bool ignore_errors);
private:
std::unordered_map<std::string, worker> m_parsers;