cmdline: fix dynamic tokens initialization
authorAdrien Mazarguil <adrien.mazarguil@6wind.com>
Mon, 10 Jul 2017 12:09:34 +0000 (14:09 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Thu, 20 Jul 2017 22:03:17 +0000 (01:03 +0300)
commitf627b65cb0706cd3eb47a57f6de312c8605e3ba8
tree384545b22d92c7ecd890ceb20babfd5fb1fb2b6a
parentea7726a6ee4b2b63313c4a198522a8dcea70c13d
cmdline: fix dynamic tokens initialization

To avoid redundant calls to the token-generating function and provide it
with helpful context, a temporary fixed-size array allocated on the stack
of cmdline_parse() and cmdline_complete() keeps the address of preceding
tokens for the command instance being processed (cmdline_parse_inst_t).

Like the static tokens array in cmdline_parse_inst_t, it must be
NULL-terminated, however this is not properly enforced as it is initialized
once at the beginning of each function and a NULL terminator is never
appended once replaced with generated tokens.

When several commands rely on dynamic tokens, subsequent ones inherit an
already initialized array whose tokens are not regenerated, which causes
various issues such as mixed and repeated tokens from the first command.

Enforcing NULL termination of the dynamic tokens array and reinitializing
its first entry at each iteration solves these issues. Doing so is also
less expensive than a full memset() at each iteration.

Fixes: 4fffc05a2b2c ("cmdline: support dynamic tokens")
Cc: stable@dpdk.org
Signed-off-by: Bernard Iremonger <bernard.iremonger@intel.com>
Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
Acked-by: Olivier Matz <olivier.matz@6wind.com>
lib/librte_cmdline/cmdline_parse.c