From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id C80F4A0487 for ; Mon, 1 Jul 2019 15:10:57 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 931A81B9AA; Mon, 1 Jul 2019 15:10:57 +0200 (CEST) Received: from mail.droids-corp.org (zoll.droids-corp.org [94.23.50.67]) by dpdk.org (Postfix) with ESMTP id EA2BD5B3C for ; Mon, 1 Jul 2019 15:10:55 +0200 (CEST) Received: from lfbn-lil-1-176-160.w90-45.abo.wanadoo.fr ([90.45.26.160] helo=droids-corp.org) by mail.droids-corp.org with esmtpsa (TLS1.0:RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1hhw87-0007qg-VQ; Mon, 01 Jul 2019 15:14:01 +0200 Received: by droids-corp.org (sSMTP sendmail emulation); Mon, 01 Jul 2019 15:10:54 +0200 Date: Mon, 1 Jul 2019 15:10:54 +0200 From: Olivier Matz To: Mesut Ali Ergin Cc: dev@dpdk.org Message-ID: <20190701131054.7b5nmhkusuncxaoc@platinum> References: <1557985267-280205-1-git-send-email-mesut.a.ergin@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1557985267-280205-1-git-send-email-mesut.a.ergin@intel.com> User-Agent: NeoMutt/20170113 (1.7.2) Subject: Re: [dpdk-dev] [PATCH] kvargs: trim spaces at the beginning and end of key and values X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi, On Wed, May 15, 2019 at 10:41:07PM -0700, Mesut Ali Ergin wrote: > When arguments delimited with RTE_KVARGS_PAIRS_DELIM happen to have > spaces before and after the delimiter, the rte_kvargs_process() can not > match them to the intended key. For example, the first argument below > triggers the support-multi-driver handler as expected, but the second > one silently fails to do so. > > -w '84:00.0,support-multi-driver=1' > -w '84:00.0, support-multi-driver=1' > > Signed-off-by: Mesut Ali Ergin > --- > lib/librte_kvargs/rte_kvargs.c | 32 ++++++++++++++++++++++++++++++-- > 1 file changed, 30 insertions(+), 2 deletions(-) > > diff --git a/lib/librte_kvargs/rte_kvargs.c b/lib/librte_kvargs/rte_kvargs.c > index f7030c6..1f45bc6 100644 > --- a/lib/librte_kvargs/rte_kvargs.c > +++ b/lib/librte_kvargs/rte_kvargs.c > @@ -10,6 +10,32 @@ > > #include "rte_kvargs.h" > > + > +/* trim leading and trailing spaces */ > +static char * > +trim_space(char *str) > +{ > + char *start, *end; > + > + for (start = str; *start; start++) { > + if (!isspace((unsigned char) start[0])) > + break; > + } > + > + for (end = start + strlen(start); end > start + 1; end--) { > + if (!isspace((unsigned char) end[-1])) > + break; > + } > + > + *end = 0; > + > + /* Shift from "start" to the beginning of the string */ > + if (start > str) > + memmove(str, start, (end - start) + 1); > + > + return str; > +} > + > /* > * Receive a string with a list of arguments following the pattern > * key=value,key=value,... and insert them into the list. > @@ -38,8 +64,10 @@ rte_kvargs_tokenize(struct rte_kvargs *kvlist, const char *params) > if (i >= RTE_KVARGS_MAX) > return -1; > > - kvlist->pairs[i].key = strtok_r(str, RTE_KVARGS_KV_DELIM, &ctx2); > - kvlist->pairs[i].value = strtok_r(NULL, RTE_KVARGS_KV_DELIM, &ctx2); > + kvlist->pairs[i].key = trim_space(strtok_r(str, > + RTE_KVARGS_KV_DELIM, &ctx2)); > + kvlist->pairs[i].value = trim_space(strtok_r(NULL, > + RTE_KVARGS_KV_DELIM, &ctx2)); > if (kvlist->pairs[i].key == NULL || > kvlist->pairs[i].value == NULL) > return -1; Having a space in the kwvargs strings like in your example (-w '84:00.0, support-multi-driver=1') is wrong. I don't think we should fix this in kvargs library. I you feel it is necessary, we could potentially add a comment in the API description to highlight this. Thanks, Olivier