diff options
author | jilles <jilles@FreeBSD.org> | 2010-09-11 14:15:50 +0000 |
---|---|---|
committer | jilles <jilles@FreeBSD.org> | 2010-09-11 14:15:50 +0000 |
commit | 694b7e6c3713db74cbd3cd49f1e718b36a0691ec (patch) | |
tree | 3fb69cb9bb788d82bbb1fcbaa235e19c821fbd7d /bin/sh | |
parent | 107ea66c07f4e9862fd2961da07c078eab84d05f (diff) | |
download | FreeBSD-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')
-rw-r--r-- | bin/sh/var.c | 6 |
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) |