[wtp] use goto error exit instead of deep nested if conditions

Convert WTP main() function to linux kernel style goto error exits.
This commit is contained in:
Andreas Schultz 2016-03-16 10:01:03 +01:00
parent 3b7c0adda7
commit ea87da11ba
1 changed files with 96 additions and 81 deletions

View File

@ -1396,7 +1396,10 @@ int main(int argc, char** argv) {
if (geteuid() != 0) {
capwap_logging_fatal("Request root privileges");
result = CAPWAP_REQUEST_ROOT;
} else {
goto out_close_log;
}
/* Init random generator */
capwap_init_rand();
@ -1404,18 +1407,29 @@ int main(int argc, char** argv) {
if (capwap_crypt_init()) {
result = CAPWAP_CRYPT_ERROR;
capwap_logging_fatal("Error to init crypt engine");
} else {
goto out_check_memory;
}
/* Init WTP */
if (!wtp_init()) {
result = WTP_ERROR_SYSTEM_FAILER;
capwap_logging_fatal("Error to init WTP engine");
} else {
goto out_release_crypto;
}
/* Read configuration file */
value = wtp_load_configuration(argc, argv);
if (value < 0) {
result = WTP_ERROR_LOAD_CONFIGURATION;
capwap_logging_fatal("Error to load configuration");
} else if (value > 0) {
goto out_destroy_wtp;
} else if (value == 0)
/* error already reported in config parser */
goto out_destroy_wtp;
if (!g_wtp.standalone) {
capwap_daemon();
@ -1429,7 +1443,11 @@ int main(int argc, char** argv) {
wtp_wait_radio_ready();
/* Connect WTP with kernel module */
if (!wtp_kmod_init()) {
if (wtp_kmod_init()) {
capwap_logging_fatal("Unable to connect with kernel module");
goto out_close_radio;
}
capwap_logging_info("SmartCAPWAP kernel module connected");
/* */
@ -1450,10 +1468,8 @@ int main(int argc, char** argv) {
/* */
capwap_logging_info("Terminate WTP");
} else {
capwap_logging_fatal("Unable to connect with kernel module");
}
out_close_radio:
/* Close radio */
wtp_radio_close();
@ -1462,24 +1478,23 @@ int main(int argc, char** argv) {
capwap_logging_info("Free wifi binding engine");
wifi_driver_free();
}
}
out_destroy_wtp:
/* Free memory */
wtp_destroy();
}
out_release_crypto:
/* Free crypt */
capwap_crypt_free();
}
out_check_memory:
/* Check memory leak */
if (capwap_check_memory_leak(1)) {
if (result == CAPWAP_SUCCESSFUL) {
if (result == CAPWAP_SUCCESSFUL)
result = WTP_ERROR_MEMORY_LEAK;
}
}
}
out_close_log:
/* Close logging */
capwap_logging_close();