ash: fix fallout from "A=1 B=$A; echo $B" code.
This commit is contained in:
parent
624188aec0
commit
c12d51e94e
48
shell/ash.c
48
shell/ash.c
@ -1785,22 +1785,26 @@ static struct globals_var *const ptr_to_globals_var __attribute__ ((section (".d
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define vifs varinit[0]
|
#define vifs varinit[0]
|
||||||
#if ENABLE_ASH_MAIL
|
#if ENABLE_ASH_MAIL
|
||||||
#define vmail (&vifs)[1]
|
# define vmail (&vifs)[1]
|
||||||
#define vmpath (&vmail)[1]
|
# define vmpath (&vmail)[1]
|
||||||
|
# define vpath (&vmpath)[1]
|
||||||
#else
|
#else
|
||||||
#define vmpath vifs
|
# define vpath (&vifs)[1]
|
||||||
#endif
|
#endif
|
||||||
#define vpath (&vmpath)[1]
|
#define vps1 (&vpath)[1]
|
||||||
#define vps1 (&vpath)[1]
|
#define vps2 (&vps1)[1]
|
||||||
#define vps2 (&vps1)[1]
|
#define vps4 (&vps2)[1]
|
||||||
#define vps4 (&vps2)[1]
|
|
||||||
#define voptind (&vps4)[1]
|
|
||||||
#if ENABLE_ASH_GETOPTS
|
#if ENABLE_ASH_GETOPTS
|
||||||
#define vrandom (&voptind)[1]
|
# define voptind (&vps4)[1]
|
||||||
|
# if ENABLE_ASH_RANDOM_SUPPORT
|
||||||
|
# define vrandom (&voptind)[1]
|
||||||
|
# endif
|
||||||
#else
|
#else
|
||||||
#define vrandom (&vps4)[1]
|
# if ENABLE_ASH_RANDOM_SUPPORT
|
||||||
|
# define vrandom (&vps4)[1]
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1810,15 +1814,18 @@ static struct globals_var *const ptr_to_globals_var __attribute__ ((section (".d
|
|||||||
*/
|
*/
|
||||||
#define ifsval() (vifs.text + 4)
|
#define ifsval() (vifs.text + 4)
|
||||||
#define ifsset() ((vifs.flags & VUNSET) == 0)
|
#define ifsset() ((vifs.flags & VUNSET) == 0)
|
||||||
#define mailval() (vmail.text + 5)
|
#if ENABLE_ASH_MAIL
|
||||||
#define mpathval() (vmpath.text + 9)
|
# define mailval() (vmail.text + 5)
|
||||||
|
# define mpathval() (vmpath.text + 9)
|
||||||
|
# define mpathset() ((vmpath.flags & VUNSET) == 0)
|
||||||
|
#endif
|
||||||
#define pathval() (vpath.text + 5)
|
#define pathval() (vpath.text + 5)
|
||||||
#define ps1val() (vps1.text + 4)
|
#define ps1val() (vps1.text + 4)
|
||||||
#define ps2val() (vps2.text + 4)
|
#define ps2val() (vps2.text + 4)
|
||||||
#define ps4val() (vps4.text + 4)
|
#define ps4val() (vps4.text + 4)
|
||||||
#define optindval() (voptind.text + 7)
|
#if ENABLE_ASH_GETOPTS
|
||||||
|
# define optindval() (voptind.text + 7)
|
||||||
#define mpathset() ((vmpath.flags & VUNSET) == 0)
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#define is_name(c) ((c) == '_' || isalpha((unsigned char)(c)))
|
#define is_name(c) ((c) == '_' || isalpha((unsigned char)(c)))
|
||||||
@ -5912,8 +5919,9 @@ varvalue(char *name, int varflags, int flags, struct strlist *var_str_list)
|
|||||||
unsigned name_len = (strchrnul(name, '=') - name) + 1;
|
unsigned name_len = (strchrnul(name, '=') - name) + 1;
|
||||||
p = NULL;
|
p = NULL;
|
||||||
do {
|
do {
|
||||||
char *str = var_str_list->text;
|
char *str, *eq;
|
||||||
char *eq = strchr(str, '=');
|
str = var_str_list->text;
|
||||||
|
eq = strchr(str, '=');
|
||||||
if (!eq) /* stop at first non-assignment */
|
if (!eq) /* stop at first non-assignment */
|
||||||
break;
|
break;
|
||||||
eq++;
|
eq++;
|
||||||
@ -7677,6 +7685,7 @@ evalfor(union node *n, int flags)
|
|||||||
struct stackmark smark;
|
struct stackmark smark;
|
||||||
|
|
||||||
setstackmark(&smark);
|
setstackmark(&smark);
|
||||||
|
arglist.list = NULL;
|
||||||
arglist.lastp = &arglist.list;
|
arglist.lastp = &arglist.list;
|
||||||
for (argp = n->nfor.args; argp; argp = argp->narg.next) {
|
for (argp = n->nfor.args; argp; argp = argp->narg.next) {
|
||||||
expandarg(argp, &arglist, EXP_FULL | EXP_TILDE | EXP_RECORD);
|
expandarg(argp, &arglist, EXP_FULL | EXP_TILDE | EXP_RECORD);
|
||||||
@ -7716,6 +7725,7 @@ evalcase(union node *n, int flags)
|
|||||||
struct stackmark smark;
|
struct stackmark smark;
|
||||||
|
|
||||||
setstackmark(&smark);
|
setstackmark(&smark);
|
||||||
|
arglist.list = NULL;
|
||||||
arglist.lastp = &arglist.list;
|
arglist.lastp = &arglist.list;
|
||||||
expandarg(n->ncase.expr, &arglist, EXP_TILDE);
|
expandarg(n->ncase.expr, &arglist, EXP_TILDE);
|
||||||
exitstatus = 0;
|
exitstatus = 0;
|
||||||
@ -7777,7 +7787,7 @@ expredir(union node *n)
|
|||||||
for (redir = n; redir; redir = redir->nfile.next) {
|
for (redir = n; redir; redir = redir->nfile.next) {
|
||||||
struct arglist fn;
|
struct arglist fn;
|
||||||
|
|
||||||
memset(&fn, 0, sizeof(fn));
|
fn.list = NULL;
|
||||||
fn.lastp = &fn.list;
|
fn.lastp = &fn.list;
|
||||||
switch (redir->type) {
|
switch (redir->type) {
|
||||||
case NFROMTO:
|
case NFROMTO:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user