DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] CLI parsing issue
@ 2017-04-20  8:36 Lu, Wenzhuo
  2017-04-20  8:54 ` Olivier MATZ
  0 siblings, 1 reply; 6+ messages in thread
From: Lu, Wenzhuo @ 2017-04-20  8:36 UTC (permalink / raw)
  To: Olivier Matz; +Cc: dev

Hi Olivier,
I met a problem thar the parsing result of CLI is wrong.
I checked this function, cmdline_parse. It will check the CLI instances one by one. Even if an instance is matched, the parsing will not stop for ambiguous check. Seems the following check may change the parsing result of the previous one,
/* fully parsed */
                              tok = match_inst(inst, buf, 0, result.buf, sizeof(result.buf),
                                                            &dyn_tokens);


Is it better to use a temporary validate for match_inst and only store the result when it matches, so the previous result has no chance to be changed? Like bellow,


diff --git a/lib/librte_cmdline/cmdline_parse.c b/lib/librte_cmdline/cmdline_parse.c
index 763c286..663efd1 100644
--- a/lib/librte_cmdline/cmdline_parse.c
+++ b/lib/librte_cmdline/cmdline_parse.c
@@ -259,6 +259,7 @@
                char buf[CMDLINE_PARSE_RESULT_BUFSIZE];
                long double align; /* strong alignment constraint for buf */
        } result;
+       char tmp_buf[CMDLINE_PARSE_RESULT_BUFSIZE];
        cmdline_parse_token_hdr_t *dyn_tokens[CMDLINE_PARSE_DYNAMIC_TOKENS];
        void (*f)(void *, struct cmdline *, void *) = NULL;
        void *data = NULL;
@@ -321,7 +322,7 @@
                debug_printf("INST %d\n", inst_num);

                /* fully parsed */
-               tok = match_inst(inst, buf, 0, result.buf, sizeof(result.buf),
+               tok = match_inst(inst, buf, 0, tmp_buf, sizeof(tmp_buf),
                                 &dyn_tokens);

                if (tok > 0) /* we matched at least one token */
@@ -329,6 +330,8 @@

                else if (!tok) {
                        debug_printf("INST fully parsed\n");
+                       memcpy(result.buf, tmp_buf,
+                              CMDLINE_PARSE_RESULT_BUFSIZE);
                        /* skip spaces */
                        while (isblank2(*curbuf)) {
                                curbuf++;


Best regards
Wenzhuo Lu

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2017-04-25  1:16 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-20  8:36 [dpdk-dev] CLI parsing issue Lu, Wenzhuo
2017-04-20  8:54 ` Olivier MATZ
2017-04-21  1:17   ` Lu, Wenzhuo
2017-04-24  1:49     ` Lu, Wenzhuo
2017-04-24 10:11       ` Olivier Matz
2017-04-25  1:16         ` Lu, Wenzhuo

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).