From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id EB4215A66 for ; Wed, 14 Oct 2015 11:31:45 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga101.fm.intel.com with ESMTP; 14 Oct 2015 02:31:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.17,681,1437462000"; d="scan'208";a="826348750" Received: from bricha3-mobl3.ger.corp.intel.com ([10.237.208.61]) by orsmga002.jf.intel.com with SMTP; 14 Oct 2015 02:31:29 -0700 Received: by (sSMTP sendmail emulation); Wed, 14 Oct 2015 10:31:28 +0025 Date: Wed, 14 Oct 2015 10:31:28 +0100 From: Bruce Richardson To: Tiwei Bie Message-ID: <20151014093128.GC32308@bricha3-MOBL3> References: <1444726446-8106-1-git-send-email-btw@mail.ustc.edu.cn> <1444726446-8106-2-git-send-email-btw@mail.ustc.edu.cn> <20151014022843.GA26774@dell> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20151014022843.GA26774@dell> Organization: Intel Shannon Ltd. User-Agent: Mutt/1.5.23 (2014-03-12) Cc: "dev@dpdk.org" , Don Provan Subject: Re: [dpdk-dev] [PATCH] eal/bsd: reinitialize optind and optreset to 1 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2015 09:31:46 -0000 On Wed, Oct 14, 2015 at 10:28:44AM +0800, Tiwei Bie wrote: > On Tue, Oct 13, 2015 at 05:14:38PM +0000, Don Provan wrote: > > Actually, this is a good opportunity to fix a bug that's been in this code forever: it shouldn't be resetting optind to some arbitrary value: it should be saving optind (and optarg and optopt) at the beginning, initializing optind to 1 before calling getopt_long(), then restoring all the values after. (And, from what you're saying, optreset should be handled the same as optind.) > > > > It is designed to have DPDK's parameters specified in the front of the > cmd line and terminated by '--'. Or at least, you should put DPDK's > parameters together and terminate them by '--'. And 1 or 0 are not some > arbitrary values. They are used to put the index back to the beginning > of the new argv[] array. > > > This avoids broken behavior if rte_eal_init() is called by code that's in the middle of using getopt() to parse its own unrelated argc/argv parameters. > > > > We shouldn't mix up DPDK's parameters and application's parameters. > And we should group them using '--'. > > Best, > Tiwei Bie While true, that does not prevent us from implementing Don's suggestion, as it should fix the bug you are looking at with your original patch, and also allow additional use-cases for applications at no extra cost. /Bruce > > > -don provan > > dprovan@bivio.net > > > > -----Original Message----- > > From: Tiwei Bie [mailto:btw@mail.ustc.edu.cn] > > Sent: Tuesday, October 13, 2015 1:54 AM > > To: dev@dpdk.org > > Subject: [dpdk-dev] [PATCH] eal/bsd: reinitialize optind and optreset to 1 > > > > The variable optind must be reinitialized to 1 in order to skip over argv[0] on FreeBSD. Because getopt() on FreeBSD will return -1 when it meets an argument which doesn't start with '-'. > > > > The variable optreset is provided on FreeBSD to indicate the additional set of calls to getopt(). So, also reinitialize it to 1. > > > > Signed-off-by: Tiwei Bie > > --- > > lib/librte_eal/bsdapp/eal/eal.c | 6 ++++-- > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > diff --git a/lib/librte_eal/bsdapp/eal/eal.c b/lib/librte_eal/bsdapp/eal/eal.c index 1b6f705..35feaee 100644 > > --- a/lib/librte_eal/bsdapp/eal/eal.c > > +++ b/lib/librte_eal/bsdapp/eal/eal.c > > @@ -334,7 +334,8 @@ eal_log_level_parse(int argc, char **argv) > > break; > > } > > > > - optind = 0; /* reset getopt lib */ > > + optind = 1; /* reset getopt lib */ > > + optreset = 1; > > } > > > > /* Parse the argument given in the command line of the application */ @@ -403,7 +404,8 @@ eal_parse_args(int argc, char **argv) > > if (optind >= 0) > > argv[optind-1] = prgname; > > ret = optind-1; > > - optind = 0; /* reset getopt lib */ > > + optind = 1; /* reset getopt lib */ > > + optreset = 1; > > return ret; > > } > > > > -- > > 2.6.0 > > > > > > >