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;
>               } ;
>  
>  %%
> 

Reply via email to