This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Max gerrit-no-reply at lists.osmocom.orgMax has submitted this change and it was merged. Change subject: Simplify ctrl cmd lookup ...................................................................... Simplify ctrl cmd lookup Replace if-else ladder & gotos with single switch statement & explicit return to make reading code easier. Change-Id: Ida1b389b571c60c26813cd29e61b3e4423c5df0f --- M src/ctrl/control_if.c M src/ctrl/fsm_ctrl_commands.c 2 files changed, 25 insertions(+), 32 deletions(-) Approvals: Harald Welte: Looks good to me, approved Jenkins Builder: Verified diff --git a/src/ctrl/control_if.c b/src/ctrl/control_if.c index c4b6f91..5a84f7c 100644 --- a/src/ctrl/control_if.c +++ b/src/ctrl/control_if.c @@ -192,7 +192,7 @@ { char *request; int i, j, ret, node; - + bool break_cycle = false; vector vline, cmdvec, cmds_vec; if (cmd->type == CTRL_TYPE_SET_REPLY || @@ -250,14 +250,20 @@ } } - if (rc == 1) { - /* do nothing */ - } else if (rc == -ENODEV) - goto err_missing; - else if (rc == -ERANGE) - goto err_index; - else { - /* If we're here the rest must be the command */ + switch (rc) { + case 1: /* do nothing */ + break; + case -ENODEV: + cmd_free_strvec(vline); + cmd->type = CTRL_TYPE_ERROR; + cmd->reply = "Error while resolving object"; + return ret; + case -ERANGE: + cmd_free_strvec(vline); + cmd->type = CTRL_TYPE_ERROR; + cmd->reply = "Error while parsing the index."; + return ret; + default: /* If we're here the rest must be the command */ cmdvec = vector_init(vector_active(vline)-i); for (j=i; j<vector_active(vline); j++) { vector_set(cmdvec, vector_slot(vline, j)); @@ -273,10 +279,13 @@ } ret = ctrl_cmd_exec(cmdvec, cmd, cmds_vec, data); - vector_free(cmdvec); + break_cycle = true; break; } + + if (break_cycle) + break; if (i+1 == vector_active(vline)) cmd->reply = "Command not present."; @@ -303,17 +312,6 @@ if (ret == CTRL_CMD_ERROR) cmd->type = CTRL_TYPE_ERROR; - return ret; - -err_missing: - cmd_free_strvec(vline); - cmd->type = CTRL_TYPE_ERROR; - cmd->reply = "Error while resolving object"; - return ret; -err_index: - cmd_free_strvec(vline); - cmd->type = CTRL_TYPE_ERROR; - cmd->reply = "Error while parsing the index."; return ret; } diff --git a/src/ctrl/fsm_ctrl_commands.c b/src/ctrl/fsm_ctrl_commands.c index 64324f2..95d5fca 100644 --- a/src/ctrl/fsm_ctrl_commands.c +++ b/src/ctrl/fsm_ctrl_commands.c @@ -27,10 +27,10 @@ (*i)++; fsm_name = vector_lookup(vline, *i); if (!fsm_name) - goto err_index; + return -ERANGE; fsm = osmo_fsm_find_by_name(fsm_name); if (!fsm) - goto err_missing; + return -ENODEV; *node_data = fsm; *node_type = CTRL_NODE_FSM; } else @@ -43,10 +43,10 @@ (*i)++; inst_name = vector_lookup(vline, *i); if (!inst_name) - goto err_index; + return -ERANGE; fi = osmo_fsm_inst_find_by_name(fsm, inst_name); if (!fi) - goto err_missing; + return -ENODEV; *node_data = fi; *node_type = CTRL_NODE_FSM_INST; } else if (!strcmp(token, "id")) { @@ -54,10 +54,10 @@ (*i)++; inst_id = vector_lookup(vline, *i); if (!inst_id) - goto err_index; + return -ERANGE; fi = osmo_fsm_inst_find_by_id(fsm, inst_id); if (!fi) - goto err_missing; + return -ENODEV; *node_data = fi; *node_type = CTRL_NODE_FSM_INST; } @@ -67,11 +67,6 @@ } return 1; - -err_index: - return -ERANGE; -err_missing: - return -ENODEV; } static int get_fsm_inst_state(struct ctrl_cmd *cmd, void *data) -- To view, visit https://gerrit.osmocom.org/2462 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: merged Gerrit-Change-Id: Ida1b389b571c60c26813cd29e61b3e4423c5df0f Gerrit-PatchSet: 4 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Max <msuraev at sysmocom.de> Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: Max <msuraev at sysmocom.de>