[MERGED] libosmocore[master]: Simplify ctrl cmd lookup

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.org
Mon May 8 08:52:33 UTC 2017


Max 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>



More information about the gerrit-log mailing list