lib: better warnings for install_element

Also fixes misuse of vector_slot() - that one doesn't check for access
beyond end of vector...

And print node names in grammar sandbox "printall".

Fixes: #543
Signed-off-by: David Lamparter <equinox@opensourcerouting.org>
This commit is contained in:
David Lamparter 2017-08-23 17:06:24 +02:00
parent 427f8e61bb
commit 3cbb67f229
2 changed files with 20 additions and 15 deletions

View File

@ -360,21 +360,23 @@ void install_element(enum node_type ntype, struct cmd_element *cmd)
return;
}
cnode = vector_slot(cmdvec, ntype);
cnode = vector_lookup(cmdvec, ntype);
if (cnode == NULL) {
fprintf(stderr,
"Command node %d doesn't exist, please check it\n",
ntype);
fprintf(stderr,
"Have you called install_node before this install_element?\n");
"%s[%s]:\n"
"\tnode %d (%s) does not exist.\n"
"\tplease call install_node() before install_element()\n",
cmd->name, cmd->string, ntype, node_names[ntype]);
exit(EXIT_FAILURE);
}
if (hash_lookup(cnode->cmd_hash, cmd) != NULL) {
fprintf(stderr,
"Multiple command installs to node %d of command:\n%s\n",
ntype, cmd->string);
"%s[%s]:\n"
"\tnode %d (%s) already has this command installed.\n"
"\tduplicate install_element call?\n",
cmd->name, cmd->string, ntype, node_names[ntype]);
return;
}
@ -407,21 +409,23 @@ void uninstall_element(enum node_type ntype, struct cmd_element *cmd)
return;
}
cnode = vector_slot(cmdvec, ntype);
cnode = vector_lookup(cmdvec, ntype);
if (cnode == NULL) {
fprintf(stderr,
"Command node %d doesn't exist, please check it\n",
ntype);
fprintf(stderr,
"Have you called install_node before this install_element?\n");
"%s[%s]:\n"
"\tnode %d (%s) does not exist.\n"
"\tplease call install_node() before uninstall_element()\n",
cmd->name, cmd->string, ntype, node_names[ntype]);
exit(EXIT_FAILURE);
}
if (hash_release(cnode->cmd_hash, cmd) == NULL) {
fprintf(stderr,
"Trying to uninstall non-installed command (node %d):\n%s\n",
ntype, cmd->string);
"%s[%s]:\n"
"\tnode %d (%s) does not have this command installed.\n"
"\tduplicate uninstall_element call?\n",
cmd->name, cmd->string, ntype, node_names[ntype]);
return;
}

View File

@ -404,7 +404,8 @@ DEFUN (grammar_findambig,
nodegraph = cnode->cmdgraph;
if (!nodegraph)
continue;
vty_out(vty, "scanning node %d\n", scannode - 1);
vty_out(vty, "scanning node %d (%s)\n",
scannode - 1, node_names[scannode - 1]);
}
commands = cmd_graph_permutations(nodegraph);