Simplify ctrl cmd lookup

Replace if-else ladder & gotos with single switch statement & explicit
return to make reading code easier.

Change-Id: Ida1b389b571c60c26813cd29e61b3e4423c5df0f
diff --git a/src/ctrl/control_if.c b/src/ctrl/control_if.c
index c4b6f91..5a84f7c0 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,11 +279,14 @@
 			}
 
 			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.";
 	}
@@ -304,17 +313,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)