summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/synopsis.rst17
-rw-r--r--src/main.cpp22
2 files changed, 33 insertions, 6 deletions
diff --git a/doc/synopsis.rst b/doc/synopsis.rst
index 5b93a92..2b28c74 100644
--- a/doc/synopsis.rst
+++ b/doc/synopsis.rst
@@ -1,4 +1,19 @@
Synopsis
========
-biboumi [*config_filename*]
+biboumi [-ht] [*config_filename*]
+
+Command-Line Options
+========
+
+-h, \\-\\-help
+~~~~~~~~
+
+Display a help message and exit.
+
+-t, \\-\\-test-config
+~~~~~~~~
+
+Do not run, just test the configuration file syntax. Exit with a 0
+status if the configuration is valid, exits with a non-zero status
+otherwise.
diff --git a/src/main.cpp b/src/main.cpp
index 2448197..21d0df8 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -38,7 +38,7 @@ int config_help(const std::string& missing_option)
int display_help()
{
- std::cout << "Usage: biboumi [configuration_file]" << std::endl;
+ std::cout << "Usage: biboumi [-ht] [configuration_file]" << std::endl;
return 0;
}
@@ -194,13 +194,19 @@ static int main_loop(std::string hostname, std::string password)
int main(int ac, char** av)
{
+ std::string cli_conf_filename;
+ bool test_conf = false;
if (ac > 1)
{
- const std::string arg = av[1];
- if (arg.size() >= 2 && arg[0] == '-' && arg[1] == '-')
+ for (int i = 1; i < ac; i++)
{
- if (arg == "--help")
+ const std::string arg = av[i];
+ if ((arg == "-h") || (arg == "--help"))
return display_help();
+ else if ((arg == "-t") || (arg == "--test-config"))
+ test_conf = true;
+ else if (i + 1 == ac)
+ cli_conf_filename = arg;
else
{
std::cerr << "Unknow command line option: " << arg
@@ -210,7 +216,7 @@ int main(int ac, char** av)
}
}
const std::string conf_filename =
- ac > 1 ? av[1]: xdg_config_path("biboumi.cfg");
+ cli_conf_filename.empty() ? xdg_config_path("biboumi.cfg"): cli_conf_filename;
std::cout << "Using configuration file: " << conf_filename << std::endl;
if (!Config::read_conf(conf_filename))
@@ -222,6 +228,12 @@ int main(int ac, char** av)
const std::string hostname = Config::get("hostname", "");
if (hostname.empty())
return config_help("hostname");
+ if (test_conf)
+ {
+ std::cout << "biboumi: the configuration file " << conf_filename
+ << " syntax is ok" << std::endl;
+ return 0;
+ }
#ifdef USE_DATABASE
try