[dpdk-dev] CLI parsing issue

Lu, Wenzhuo wenzhuo.lu at intel.com
Thu Apr 20 10:36:38 CEST 2017


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



More information about the dev mailing list