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);
|
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
|
// Block the signals we want to manage. They will be unblocked only during
|
||||||
// the epoll_pwait or ppoll calls. This avoids some race conditions,
|
// the epoll_pwait or ppoll calls. This avoids some race conditions,
|
||||||
// explained in man 2 pselect on linux
|
// explained in man 2 pselect on linux
|
||||||
@@ -126,7 +89,10 @@ int main(int ac, char** av)
|
|||||||
sigaction(SIGUSR1, &on_sigusr, nullptr);
|
sigaction(SIGUSR1, &on_sigusr, nullptr);
|
||||||
sigaction(SIGUSR2, &on_sigusr, nullptr);
|
sigaction(SIGUSR2, &on_sigusr, nullptr);
|
||||||
sigaction(SIGHUP, &on_sigusr, nullptr);
|
sigaction(SIGHUP, &on_sigusr, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int main_loop(std::string hostname, std::string password)
|
||||||
|
{
|
||||||
auto p = std::make_shared<Poller>();
|
auto p = std::make_shared<Poller>();
|
||||||
|
|
||||||
#ifdef UDNS_FOUND
|
#ifdef UDNS_FOUND
|
||||||
@@ -225,3 +191,51 @@ int main(int ac, char** av)
|
|||||||
log_info("All connections cleanly closed, have a nice day.");
|
log_info("All connections cleanly closed, have a nice day.");
|
||||||
return 0;
|
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