[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

View File

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