Coverity (correctly) identified an issue[1] where, after the recent rework[2], the internal flag, used by argparse to track what arguments were previously encountered or not, was out of range for the type and no longer having any effect. Fixing this flag to be back into range then, somewhat surprisingly, caused a number of unit test failures to occur.
The reason for these failures is that the tracking of args encountered is done via setting an internal flag on the user-passed arguments object. In the unit tests, this caused issues where the flags field was not getting properly reset between calls to the parse operation. [This is only an issue after the rework, because previously information like param type and optionality was encoded in the flags, so they were more often reset during testing]. Rather than fixing the tests directly to always reset the flags, which is simply working around the issue IMHO, this patchset instead fixes the issue in a more user-friendly way by changing the library to never modify the user-passed structure - making it completely safe to reuse across multiple calls. This is done in the first two patches. The final, third patch, adds an additional unit test to check that the tracking of flags being seen or not, and the handling of the "RTE_ARGPARSE_FLAG_SUPPORT_MULTI" flag is correct. This closes a gap in testing, since the original issue of the flag being out-of-range should have been caught in testing, rather than having to rely on coverity. [1] Coverity Issue: 470190 [2] https://github.com/DPDK/dpdk/commit/04acc21beeeb78477b15a3f497d3628fd70a6a9f Bruce Richardson (3): argparse: track parsed arguments internally argparse: mark parameter struct as const test/argparse: add test for repeated arguments app/test/test_argparse.c | 33 +++++++++++++++++ lib/argparse/rte_argparse.c | 73 ++++++++++++++++++++++--------------- lib/argparse/rte_argparse.h | 2 +- 3 files changed, 77 insertions(+), 31 deletions(-) -- 2.48.1