[LTP] [PATCH v2 03/11] docparse: Add test documentation parser

Petr Vorel pvorel@suse.cz
Wed Nov 4 17:37:13 CET 2020


Hi Li,

...
> > IMHO this change (adding buf[i++] = c;), which Li suggested,
> > is causing build failures:
> > https://travis-ci.org/github/pevik/ltp/builds/741217630

> > /usr/src/ltp/docparse/testinfo.pl metadata.json
> > , or ] expected while parsing array, at character offset 340 (before
> > "",\n      "0c461cb72...") at /usr/src/ltp/docparse/testinfo.pl line 379.
> > make[1]: *** [/usr/src/ltp/docparse/Makefile:60: txt] Error 255
> > make[1]: Leaving directory '/usr/src/ltp-build/docparse'
> > make: *** [/usr/src/ltp/Makefile:108: docparse-all] Error 2
> > make: *** Waiting for unfinished jobs....


> Sorry for the error, it because of wrongly parsed tst_test struct with
> including .min_kver = "2.6.32",  then output into metada.json like:

> # cat metadata.json
> ...
>   "cpuset01": {
>    "needs_root": "1",
>    "forks_child": "1",
>    "min_kver": "2.6.32"",  <====== here has two "" in the end
>    "fname": "testcases/kernel/mem/cpuset/cpuset01.c"
>   },

> So the "$(abs_srcdir)/testinfo.pl metadata.json" in Makefile report failure
> as above.

> ==========

> Another fix I can think of is just to avoid return NULL if detecting in the
> string("").
> Hope this will work for us, I will help to check it again tomorrow.

> --- a/docparse/docparse.c
> +++ b/docparse/docparse.c
> @@ -138,10 +138,8 @@ const char *next_token(FILE *f, struct data_node *doc)

>                 if (in_str) {
>                         if (c == '"') {
> -                               if (i == 0 || buf[i-1] != '\\') {
> -                                       buf[i++] = c;
> +                               if (i == 0 || buf[i-1] != '\\')
>                                         goto exit;
> -                               }
>                         }

>                         buf[i++] = c;
> @@ -189,7 +187,7 @@ const char *next_token(FILE *f, struct data_node *doc)
>         }

>  exit:
> -       if (i == 0)
> +       if (i == 0 && !in_str)
>                 return NULL;

>         buf[i] = 0;

Thanks for explanation. Yes, that's a working solution:
https://travis-ci.org/github/pevik/ltp/builds/741418867

Kind regards,
Petr


More information about the ltp mailing list