/* Only one matched */
if (vector_slot (matchvec, 1) == NULL)
{
- match_str = (char **) matchvec->index;
- vector_only_wrapper_free (matchvec);
+ size_t index_size = matchvec->alloced * sizeof (void *);
+ match_str = XMALLOC (MTYPE_TMP, index_size);
+ memcpy (match_str, matchvec->index, index_size);
+ vector_free (matchvec);
+
*status = CMD_COMPLETE_FULL_MATCH;
return match_str;
}
/* Make new matchvec. */
matchvec = vector_init (INIT_MATCHVEC_SIZE);
vector_set (matchvec, lcdstr);
- match_str = (char **) matchvec->index;
- vector_only_wrapper_free (matchvec);
+
+ size_t index_size = matchvec->alloced * sizeof (void *);
+ match_str = XMALLOC (MTYPE_TMP, index_size);
+ memcpy (match_str, matchvec->index, index_size);
+ vector_free (matchvec);
*status = CMD_COMPLETE_MATCH;
return match_str;
if (rl_end && isspace ((int) rl_line_buffer[rl_end - 1]))
vector_set (vline, NULL);
+ if (matched)
+ XFREE (MTYPE_TMP, matched);
matched = cmd_complete_command (vline, vty, &complete_status);
+ cmd_free_strvec (vline);
}
if (matched && matched[index])