ok benno@
Ted Unangst([email protected]) on 2016.12.29 14:56:47 -0500:
> it occurs to me that arglist and envlist are the same thing, a strlist.
>
> Index: parse.y
> ===================================================================
> RCS file: /cvs/src/usr.bin/doas/parse.y,v
> retrieving revision 1.25
> diff -u -p -r1.25 parse.y
> --- parse.y 29 Dec 2016 19:12:42 -0000 1.25
> +++ parse.y 29 Dec 2016 19:55:33 -0000
> @@ -36,6 +36,7 @@ typedef struct {
> const char **cmdargs;
> const char **envlist;
> };
> + const char **strlist;
> const char *str;
> };
> int lineno;
> @@ -141,21 +142,21 @@ option: TNOPASS {
> } | TKEEPENV {
> $$.options = KEEPENV;
> $$.envlist = NULL;
> - } | TSETENV '{' envlist '}' {
> + } | TSETENV '{' strlist '}' {
> $$.options = 0;
> - $$.envlist = $3.envlist;
> + $$.envlist = $3.strlist;
> } ;
>
> -envlist: /* empty */ {
> - if (!($$.envlist = calloc(1, sizeof(char *))))
> - errx(1, "can't allocate envlist");
> - } | envlist TSTRING {
> - int nenv = arraylen($1.envlist);
> - if (!($$.envlist = reallocarray($1.envlist, nenv + 2,
> +strlist: /* empty */ {
> + if (!($$.strlist = calloc(1, sizeof(char *))))
> + errx(1, "can't allocate strlist");
> + } | strlist TSTRING {
> + int nstr = arraylen($1.strlist);
> + if (!($$.strlist = reallocarray($1.strlist, nstr + 2,
> sizeof(char *))))
> - errx(1, "can't allocate envlist");
> - $$.envlist[nenv] = $2.str;
> - $$.envlist[nenv + 1] = NULL;
> + errx(1, "can't allocate strlist");
> + $$.strlist[nstr] = $2.str;
> + $$.strlist[nstr + 1] = NULL;
> } ;
>
>
> @@ -179,20 +180,8 @@ cmd: /* optional */ {
>
> args: /* empty */ {
> $$.cmdargs = NULL;
> - } | TARGS argslist {
> - $$.cmdargs = $2.cmdargs;
> - } ;
> -
> -argslist: /* empty */ {
> - if (!($$.cmdargs = calloc(1, sizeof(char *))))
> - errx(1, "can't allocate args");
> - } | argslist TSTRING {
> - int nargs = arraylen($1.cmdargs);
> - if (!($$.cmdargs = reallocarray($1.cmdargs, nargs + 2,
> - sizeof(char *))))
> - errx(1, "can't allocate args");
> - $$.cmdargs[nargs] = $2.str;
> - $$.cmdargs[nargs + 1] = NULL;
> + } | TARGS strlist {
> + $$.cmdargs = $2.strlist;
> } ;
>
> %%
>