kvargs: rework API to fix memory leak
authorOlivier Matz <olivier.matz@6wind.com>
Tue, 28 Jan 2014 16:06:38 +0000 (17:06 +0100)
committerDavid Marchand <david.marchand@6wind.com>
Wed, 26 Feb 2014 10:01:14 +0000 (11:01 +0100)
commitef8e5447e3a63dd2a0fc025a143aa7bd83d0e602
tree95cf05943d7c1410720755eab3ccca8db2790ab8
parent03b611b7137a0b94bce6ecfa4e5bacd6463d503a
kvargs: rework API to fix memory leak

Before the patch, a call to rte_kvargs_tokenize() resulted in a call to
strdup() to allocate a modifiable copy of the argument string. This
string was never freed, excepted in the error cases of
rte_kvargs_tokenize() where rte_free() was wrongly called instead of
free(). In other cases, freeing this string was impossible as the
pointer not saved.

This patch introduces rte_kvargs_free() in order to free the structure
properly. The pointer to the duplicated string is now kept in the
rte_kvargs structure. A call to rte_kvargs_parse() directly allocates
the structure, making rte_kvargs_init() useless.

The only drawback of this API change is that a key/value associations
cannot be added to an existing kvlist. But it's not used today, and
there is not obvious use case for that.

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
lib/librte_kvargs/Makefile
lib/librte_kvargs/rte_kvargs.c
lib/librte_kvargs/rte_kvargs.h
lib/librte_pmd_pcap/rte_eth_pcap.c