version 1.25, 2016/12/29 19:12:42 |
version 1.26, 2017/01/02 01:40:20 |
|
|
const char **cmdargs; |
const char **cmdargs; |
const char **envlist; |
const char **envlist; |
}; |
}; |
|
const char **strlist; |
const char *str; |
const char *str; |
}; |
}; |
int lineno; |
int lineno; |
|
|
} | TKEEPENV { |
} | TKEEPENV { |
$$.options = KEEPENV; |
$$.options = KEEPENV; |
$$.envlist = NULL; |
$$.envlist = NULL; |
} | TSETENV '{' envlist '}' { |
} | TSETENV '{' strlist '}' { |
$$.options = 0; |
$$.options = 0; |
$$.envlist = $3.envlist; |
$$.envlist = $3.strlist; |
} ; |
} ; |
|
|
envlist: /* empty */ { |
strlist: /* empty */ { |
if (!($$.envlist = calloc(1, sizeof(char *)))) |
if (!($$.strlist = calloc(1, sizeof(char *)))) |
errx(1, "can't allocate envlist"); |
errx(1, "can't allocate strlist"); |
} | envlist TSTRING { |
} | strlist TSTRING { |
int nenv = arraylen($1.envlist); |
int nstr = arraylen($1.strlist); |
if (!($$.envlist = reallocarray($1.envlist, nenv + 2, |
if (!($$.strlist = reallocarray($1.strlist, nstr + 2, |
sizeof(char *)))) |
sizeof(char *)))) |
errx(1, "can't allocate envlist"); |
errx(1, "can't allocate strlist"); |
$$.envlist[nenv] = $2.str; |
$$.strlist[nstr] = $2.str; |
$$.envlist[nenv + 1] = NULL; |
$$.strlist[nstr + 1] = NULL; |
} ; |
} ; |
|
|
|
|
|
|
|
|
args: /* empty */ { |
args: /* empty */ { |
$$.cmdargs = NULL; |
$$.cmdargs = NULL; |
} | TARGS argslist { |
} | TARGS strlist { |
$$.cmdargs = $2.cmdargs; |
$$.cmdargs = $2.strlist; |
} ; |
|
|
|
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; |
|
} ; |
} ; |
|
|
%% |
%% |