mirror of https://gerrit.osmocom.org/libosmocore
vty: OSMO_ASSERT() if two identical commands are installed
When the caller installs two identical commands at a given VTY node, the result is that neither of the two commands can ever be executed: The VTY would always complain about "Ambiguous command.". Let's fail fast at program start when two identical commands are intalled. Change-Id: I85ff4640ebb3d8b75a6a9ab5d2f668edb5b7189e
This commit is contained in:
parent
ecbcdf52ec
commit
addeaa39b1
|
@ -594,6 +594,22 @@ static int vty_dump_nodes(struct vty *vty)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* \brief Check if a command with given string exists at given node */
|
||||
static int check_element_exists(struct cmd_node *cnode, const char *cmdstring)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < vector_active(cnode->cmd_vector); ++i) {
|
||||
struct cmd_element *elem;
|
||||
elem = vector_slot(cnode->cmd_vector, i);
|
||||
if (!elem->string)
|
||||
continue;
|
||||
if (!strcmp(elem->string, cmdstring))
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*! \brief Install a command into a node
|
||||
* \param[in] ntype Node Type
|
||||
* \param[cmd] element to be installed
|
||||
|
@ -605,6 +621,9 @@ void install_element(int ntype, struct cmd_element *cmd)
|
|||
cnode = vector_slot(cmdvec, ntype);
|
||||
|
||||
OSMO_ASSERT(cnode);
|
||||
/* ensure no _identical_ command has been registered at this
|
||||
* node so far */
|
||||
OSMO_ASSERT(!check_element_exists(cnode, cmd->string));
|
||||
|
||||
vector_set(cnode->cmd_vector, cmd);
|
||||
|
||||
|
|
Loading…
Reference in New Issue