summaryrefslogtreecommitdiff
path: root/lib/grammar_sandbox.c
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2016-08-03 19:22:27 +0000
committerQuentin Young <qlyoung@cumulusnetworks.com>2016-08-03 19:22:27 +0000
commit6ce82b63cd35eac37a4ddf1d0253342d5160b7af (patch)
tree87f5037429d403bbc2ae52d81c3e9d0f124b53aa /lib/grammar_sandbox.c
parent54431328fc4c0e0a9e0582ece812d244995633da (diff)
lib: Implement status variable
Matcher now keeps track of why it failed Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Diffstat (limited to 'lib/grammar_sandbox.c')
-rw-r--r--lib/grammar_sandbox.c22
1 files changed, 18 insertions, 4 deletions
diff --git a/lib/grammar_sandbox.c b/lib/grammar_sandbox.c
index c53811e062..0eb8d69cee 100644
--- a/lib/grammar_sandbox.c
+++ b/lib/grammar_sandbox.c
@@ -77,9 +77,11 @@ DEFUN (grammar_test_match,
"attempt to match input on DFA\n"
"command to match")
{
+ const char *line = argv_concat(argv, argc, 0);
+
struct list *argvv = NULL;
- const char *command = argv_concat(argv, argc, 0);
- struct cmd_element *element = match_command (nodegraph, command, &argvv);
+ struct cmd_element *element = NULL;
+ enum matcher_rv result = match_command (nodegraph, line, &argvv, &element);
if (element) {
fprintf(stderr, "Matched: %s\n", element->string);
@@ -89,8 +91,20 @@ DEFUN (grammar_test_match,
fprintf(stderr, "%s -- %s\n", gn->text, gn->arg);
}
else {
- fprintf(stderr, "Returned NULL\n");
- return CMD_SUCCESS;
+ switch (result) {
+ case MATCHER_NO_MATCH:
+ fprintf(stderr, "%% Unknown command\n");
+ break;
+ case MATCHER_INCOMPLETE:
+ fprintf(stderr, "%% Incomplete command\n");
+ break;
+ case MATCHER_AMBIGUOUS:
+ fprintf(stderr, "%% Ambiguous command\n");
+ break;
+ default:
+ fprintf(stderr, "%% Unknown error\n");
+ break;
+ }
}
return CMD_SUCCESS;