Split the main() into smaller functions
That’s not really enough, but better
This commit is contained in:
+52
-38
@@ -55,45 +55,8 @@ static void sigusr_handler(int, siginfo_t*, void*)
|
||||
reload.store(true);
|
||||
}
|
||||
|
||||
int main(int ac, char** av)
|
||||
static void setup_signals()
|
||||
{
|
||||
if (ac > 1)
|
||||
{
|
||||
const std::string arg = av[1];
|
||||
if (arg.size() >= 2 && arg[0] == '-' && arg[1] == '-')
|
||||
{
|
||||
if (arg == "--help")
|
||||
return display_help();
|
||||
else
|
||||
{
|
||||
std::cerr << "Unknow command line option: " << arg << std::endl;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
const std::string conf_filename = ac > 1 ? av[1] : xdg_config_path("biboumi.cfg");
|
||||
std::cout << "Using configuration file: " << conf_filename << std::endl;
|
||||
|
||||
if (!Config::read_conf(conf_filename))
|
||||
return config_help("");
|
||||
|
||||
const std::string password = Config::get("password", "");
|
||||
if (password.empty())
|
||||
return config_help("password");
|
||||
const std::string hostname = Config::get("hostname", "");
|
||||
if (hostname.empty())
|
||||
return config_help("hostname");
|
||||
|
||||
|
||||
#ifdef USE_DATABASE
|
||||
try {
|
||||
open_database();
|
||||
} catch (const std::exception& e) {
|
||||
log_error(e.what());
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Block the signals we want to manage. They will be unblocked only during
|
||||
// the epoll_pwait or ppoll calls. This avoids some race conditions,
|
||||
// explained in man 2 pselect on linux
|
||||
@@ -126,7 +89,10 @@ int main(int ac, char** av)
|
||||
sigaction(SIGUSR1, &on_sigusr, nullptr);
|
||||
sigaction(SIGUSR2, &on_sigusr, nullptr);
|
||||
sigaction(SIGHUP, &on_sigusr, nullptr);
|
||||
}
|
||||
|
||||
static int main_loop(std::string hostname, std::string password)
|
||||
{
|
||||
auto p = std::make_shared<Poller>();
|
||||
|
||||
#ifdef UDNS_FOUND
|
||||
@@ -225,3 +191,51 @@ int main(int ac, char** av)
|
||||
log_info("All connections cleanly closed, have a nice day.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main(int ac, char** av)
|
||||
{
|
||||
if (ac > 1)
|
||||
{
|
||||
const std::string arg = av[1];
|
||||
if (arg.size() >= 2 && arg[0] == '-' && arg[1] == '-')
|
||||
{
|
||||
if (arg == "--help")
|
||||
return display_help();
|
||||
else
|
||||
{
|
||||
std::cerr << "Unknow command line option: " << arg
|
||||
<< std::endl;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
const std::string conf_filename =
|
||||
ac > 1 ? av[1]: xdg_config_path("biboumi.cfg");
|
||||
std::cout << "Using configuration file: " << conf_filename << std::endl;
|
||||
|
||||
if (!Config::read_conf(conf_filename))
|
||||
return config_help("");
|
||||
|
||||
const std::string password = Config::get("password", "");
|
||||
if (password.empty())
|
||||
return config_help("password");
|
||||
const std::string hostname = Config::get("hostname", "");
|
||||
if (hostname.empty())
|
||||
return config_help("hostname");
|
||||
|
||||
#ifdef USE_DATABASE
|
||||
try
|
||||
{
|
||||
open_database();
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
log_error(e.what());
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
setup_signals();
|
||||
|
||||
return main_loop(std::move(hostname), std::move(password));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user