mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-08 01:15:12 +00:00
lib: Null-terminate tab completions char*[]
vtysh expects the result of a tab completion to have a null pointer as the last element Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
parent
c5bd4620b0
commit
51d41d759b
@ -618,8 +618,9 @@ cmd_complete_command_lib (vector vline, struct vty *vty, int *status, int islib)
|
|||||||
|
|
||||||
// get token completions
|
// get token completions
|
||||||
vector comps = cmd_complete_command_real (shifted_vline, vty, status);
|
vector comps = cmd_complete_command_real (shifted_vline, vty, status);
|
||||||
ret = XMALLOC (MTYPE_TMP, vector_active (comps) * sizeof (char *));
|
ret = XMALLOC (MTYPE_TMP, vector_active (comps) * sizeof (char *) + 1);
|
||||||
for (unsigned int i = 0; i < vector_active (comps); i++)
|
unsigned int i;
|
||||||
|
for (i = 0; i < vector_active (comps); i++)
|
||||||
{
|
{
|
||||||
struct cmd_token *token = vector_slot (comps, i);
|
struct cmd_token *token = vector_slot (comps, i);
|
||||||
ret[i] = XSTRDUP (MTYPE_TMP, token->text);
|
ret[i] = XSTRDUP (MTYPE_TMP, token->text);
|
||||||
@ -627,6 +628,7 @@ cmd_complete_command_lib (vector vline, struct vty *vty, int *status, int islib)
|
|||||||
del_cmd_token (token);
|
del_cmd_token (token);
|
||||||
}
|
}
|
||||||
vector_free (comps);
|
vector_free (comps);
|
||||||
|
ret[i] = NULL;
|
||||||
|
|
||||||
vector_free(shifted_vline);
|
vector_free(shifted_vline);
|
||||||
vty->node = onode;
|
vty->node = onode;
|
||||||
@ -635,14 +637,16 @@ cmd_complete_command_lib (vector vline, struct vty *vty, int *status, int islib)
|
|||||||
|
|
||||||
// get token completions
|
// get token completions
|
||||||
vector comps = cmd_complete_command_real (vline, vty, status);
|
vector comps = cmd_complete_command_real (vline, vty, status);
|
||||||
ret = XMALLOC (MTYPE_TMP, vector_active (comps) * sizeof (char *));
|
ret = XMALLOC (MTYPE_TMP, vector_active (comps) * sizeof (char *) + 1);
|
||||||
for (unsigned int i = 0; i < vector_active (comps); i++)
|
unsigned int i;
|
||||||
|
for (i = 0; i < vector_active (comps); i++)
|
||||||
{
|
{
|
||||||
struct cmd_token *token = vector_slot (comps, i);
|
struct cmd_token *token = vector_slot (comps, i);
|
||||||
ret[i] = XSTRDUP (MTYPE_TMP, token->text);
|
ret[i] = XSTRDUP (MTYPE_TMP, token->text);
|
||||||
vector_unset (comps, i);
|
vector_unset (comps, i);
|
||||||
del_cmd_token (token);
|
del_cmd_token (token);
|
||||||
}
|
}
|
||||||
|
ret[i] = NULL;
|
||||||
vector_free (comps);
|
vector_free (comps);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Loading…
Reference in New Issue
Block a user