summaryrefslogtreecommitdiffstats
path: root/bin/sh/var.c
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2010-09-11 14:15:50 +0000
committerjilles <jilles@FreeBSD.org>2010-09-11 14:15:50 +0000
commit694b7e6c3713db74cbd3cd49f1e718b36a0691ec (patch)
tree3fb69cb9bb788d82bbb1fcbaa235e19c821fbd7d /bin/sh/var.c
parent107ea66c07f4e9862fd2961da07c078eab84d05f (diff)
downloadFreeBSD-src-694b7e6c3713db74cbd3cd49f1e718b36a0691ec.zip
FreeBSD-src-694b7e6c3713db74cbd3cd49f1e718b36a0691ec.tar.gz
sh: Apply variable assignments left-to-right in bltinlookup().
Example: HOME=foo HOME=bar cd
Diffstat (limited to 'bin/sh/var.c')
-rw-r--r--bin/sh/var.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/bin/sh/var.c b/bin/sh/var.c
index 6f4acae..8ff6426 100644
--- a/bin/sh/var.c
+++ b/bin/sh/var.c
@@ -431,11 +431,15 @@ bltinlookup(const char *name, int doall)
{
struct strlist *sp;
struct var *v;
+ char *result;
+ result = NULL;
for (sp = cmdenviron ; sp ; sp = sp->next) {
if (varequal(sp->text, name))
- return strchr(sp->text, '=') + 1;
+ result = strchr(sp->text, '=') + 1;
}
+ if (result != NULL)
+ return result;
for (v = *hashvar(name) ; v ; v = v->next) {
if (varequal(v->text, name)) {
if ((v->flags & VUNSET)
OpenPOWER on IntegriCloud