diff options
Diffstat (limited to 'shell/ash.c')
-rw-r--r-- | shell/ash.c | 22 |
1 files changed, 10 insertions, 12 deletions
diff --git a/shell/ash.c b/shell/ash.c index 7a9f20ec0..15c0e56a3 100644 --- a/shell/ash.c +++ b/shell/ash.c | |||
@@ -2592,9 +2592,11 @@ initvar(void) | |||
2592 | } | 2592 | } |
2593 | 2593 | ||
2594 | static struct var ** | 2594 | static struct var ** |
2595 | findvar(struct var **vpp, const char *name) | 2595 | findvar(const char *name) |
2596 | { | 2596 | { |
2597 | for (; *vpp; vpp = &(*vpp)->next) { | 2597 | struct var **vpp; |
2598 | |||
2599 | for (vpp = hashvar(name); *vpp; vpp = &(*vpp)->next) { | ||
2598 | if (varcmp((*vpp)->var_text, name) == 0) { | 2600 | if (varcmp((*vpp)->var_text, name) == 0) { |
2599 | break; | 2601 | break; |
2600 | } | 2602 | } |
@@ -2610,7 +2612,7 @@ lookupvar(const char *name) | |||
2610 | { | 2612 | { |
2611 | struct var *v; | 2613 | struct var *v; |
2612 | 2614 | ||
2613 | v = *findvar(hashvar(name), name); | 2615 | v = *findvar(name); |
2614 | if (v) { | 2616 | if (v) { |
2615 | #if ENABLE_ASH_RANDOM_SUPPORT || BASH_EPOCH_VARS | 2617 | #if ENABLE_ASH_RANDOM_SUPPORT || BASH_EPOCH_VARS |
2616 | /* | 2618 | /* |
@@ -2756,9 +2758,8 @@ setvareq(char *s, int flags) | |||
2756 | } | 2758 | } |
2757 | #endif | 2759 | #endif |
2758 | 2760 | ||
2759 | vpp = hashvar(s); | ||
2760 | flags |= (VEXPORT & (((unsigned) (1 - aflag)) - 1)); | 2761 | flags |= (VEXPORT & (((unsigned) (1 - aflag)) - 1)); |
2761 | vpp = findvar(vpp, s); | 2762 | vpp = findvar(s); |
2762 | vp = *vpp; | 2763 | vp = *vpp; |
2763 | if (vp) { | 2764 | if (vp) { |
2764 | if ((vp->flags & (VREADONLY|VDYNAMIC)) == VREADONLY) { | 2765 | if ((vp->flags & (VREADONLY|VDYNAMIC)) == VREADONLY) { |
@@ -11131,7 +11132,6 @@ static void | |||
11131 | mklocal(char *name, int flags) | 11132 | mklocal(char *name, int flags) |
11132 | { | 11133 | { |
11133 | struct localvar *lvp; | 11134 | struct localvar *lvp; |
11134 | struct var **vpp; | ||
11135 | struct var *vp; | 11135 | struct var *vp; |
11136 | char *eq = strchr(name, '='); | 11136 | char *eq = strchr(name, '='); |
11137 | 11137 | ||
@@ -11160,8 +11160,7 @@ mklocal(char *name, int flags) | |||
11160 | lvp->text = memcpy(p, optlist, sizeof(optlist)); | 11160 | lvp->text = memcpy(p, optlist, sizeof(optlist)); |
11161 | vp = NULL; | 11161 | vp = NULL; |
11162 | } else { | 11162 | } else { |
11163 | vpp = hashvar(name); | 11163 | vp = *findvar(name); |
11164 | vp = *findvar(vpp, name); | ||
11165 | if (vp == NULL) { | 11164 | if (vp == NULL) { |
11166 | /* variable did not exist yet */ | 11165 | /* variable did not exist yet */ |
11167 | if (eq) | 11166 | if (eq) |
@@ -15510,7 +15509,7 @@ exportcmd(int argc UNUSED_PARAM, char **argv) | |||
15510 | if (p != NULL) { | 15509 | if (p != NULL) { |
15511 | p++; | 15510 | p++; |
15512 | } else { | 15511 | } else { |
15513 | vp = *findvar(hashvar(name), name); | 15512 | vp = *findvar(name); |
15514 | if (vp) { | 15513 | if (vp) { |
15515 | #if ENABLE_PLATFORM_MINGW32 | 15514 | #if ENABLE_PLATFORM_MINGW32 |
15516 | if (is_bb_var(name) == BB_VAR_EXACT) { | 15515 | if (is_bb_var(name) == BB_VAR_EXACT) { |
@@ -16553,7 +16552,7 @@ reinitvar(void) | |||
16553 | { | 16552 | { |
16554 | int i; | 16553 | int i; |
16555 | const char *name; | 16554 | const char *name; |
16556 | struct var **vpp, **old; | 16555 | struct var **old; |
16557 | 16556 | ||
16558 | for (i=0; i<ARRAY_SIZE(varinit); ++i) { | 16557 | for (i=0; i<ARRAY_SIZE(varinit); ++i) { |
16559 | if (i == LINENO_INDEX) | 16558 | if (i == LINENO_INDEX) |
@@ -16562,8 +16561,7 @@ reinitvar(void) | |||
16562 | name = "FUNCNAME="; | 16561 | name = "FUNCNAME="; |
16563 | else | 16562 | else |
16564 | name = varinit_data[i].var_text; | 16563 | name = varinit_data[i].var_text; |
16565 | vpp = hashvar(name); | 16564 | if ((old = findvar(name)) != NULL) { |
16566 | if ( (old=findvar(vpp, name)) != NULL ) { | ||
16567 | varinit[i] = **old; | 16565 | varinit[i] = **old; |
16568 | *old = varinit+i; | 16566 | *old = varinit+i; |
16569 | } | 16567 | } |