[dpdk-dev] [PATCH] Found a bug related to getopt() in eal/bsd module
Tiwei Bie
btw at mail.ustc.edu.cn
Tue Oct 13 10:54:05 CEST 2015
I found a bug when trying to make my DPDK application work on FreeBSD.
The variable optind must be reinitialized to 1 on FreeBSD to skip over
argv[0]. Because getopt() on FreeBSD will return -1 when it meets an
argument which doesn't start with '-'. This behaviour is implemented
by the 13-17 lines:
01 /*
02 * getopt --
03 * Parse argc/argv argument vector.
04 */
05 int
06 getopt(int nargc, char * const nargv[], const char *ostr)
07 {
08 static char *place = EMSG; /* option letter processing */
09 char *oli; /* option letter list index */
10
11 if (optreset || *place == 0) { /* update scanning pointer */
12 optreset = 0;
13 place = nargv[optind];
14 if (optind >= nargc || *place++ != '-') {
15 /* Argument is absent or is not an option */
16 place = EMSG;
17 return (-1);
18 }
19 ......
20 }
21 ......
22 }
The variable optreset is also provided on FreeBSD to indicate the
additional set of calls to getopt(). So, also reinitialize it to 1.
References:
1. https://svnweb.freebsd.org/base/head/lib/libc/stdlib/getopt.c?view=markup#l70
2. https://www.freebsd.org/cgi/man.cgi?query=getopt&apropos=0&sektion=3&manpath=FreeBSD+11-current&arch=default&format=html
Tiwei Bie (1):
eal/bsd: reinitialize optind and optreset to 1
lib/librte_eal/bsdapp/eal/eal.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
--
2.6.0
More information about the dev
mailing list