summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2016-09-13 01:16:22 +0000
committerQuentin Young <qlyoung@cumulusnetworks.com>2016-09-13 01:16:22 +0000
commitee551f4827cf861c84916726ceea0e3bb8afc46c (patch)
treeaaeefd37e790ca8b776ae5018237deda891b39d4
parent97c45dae54bc4d4fc3a24155ef7703beac4ae7aa (diff)
lib: Fix various matching bugs
Missed a copy, disambigs forgot to walkback Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
-rw-r--r--lib/command_match.c9
-rw-r--r--lib/command_parse.y2
2 files changed, 7 insertions, 4 deletions
diff --git a/lib/command_match.c b/lib/command_match.c
index 68dda6f9cd..3faa059a44 100644
--- a/lib/command_match.c
+++ b/lib/command_match.c
@@ -208,7 +208,8 @@ command_match_r (struct graph_node *start, vector vline, unsigned int n)
// that all nodes have the same data type, so when
// deleting this list the last node must be
// manually deleted
- listnode_add (currbest, leaf->data);
+ struct cmd_element *el = leaf->data;
+ listnode_add (currbest, copy_cmd_element (el));
currbest->del = (void (*)(void *)) &del_cmd_token;
break;
}
@@ -533,8 +534,10 @@ disambiguate (struct list *first,
char *token = vector_slot(vline, i);
if ((best = disambiguate_tokens (ftok, stok, token)))
return best == ftok ? first : second;
- ftok = listgetdata (listnextnode (fnode));
- stok = listgetdata (listnextnode (snode));
+ fnode = listnextnode (fnode);
+ snode = listnextnode (snode);
+ ftok = listgetdata (fnode);
+ stok = listgetdata (snode);
}
return NULL;
diff --git a/lib/command_parse.y b/lib/command_parse.y
index a5d391d19e..bd958c5ace 100644
--- a/lib/command_parse.y
+++ b/lib/command_parse.y
@@ -446,7 +446,7 @@ doc_next()
{
char *piece = NULL;
if (!docstr || !(piece = strsep (&docstr, "\n")))
- return NULL;
+ return XSTRDUP (MTYPE_CMD_TOKENS, "");
return XSTRDUP (MTYPE_CMD_TOKENS, piece);
}