diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2018-03-27 00:39:35 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2018-04-19 18:19:29 +0800 |
commit | 46d5a7fcea81b489819f753451c1ad2fe435f148 (patch) | |
tree | 815be18bb4833adef40246c99a4be0a9cd762fd4 /src/input.c | |
parent | eval: Reap zombies after built-in commands and functions (diff) | |
download | dash-46d5a7fcea81b489819f753451c1ad2fe435f148.tar.gz dash-46d5a7fcea81b489819f753451c1ad2fe435f148.zip |
eval: Restore input files in evalcommand
When evalcommand invokes a command that modifies parsefile and then bails out without popping the file, we need to ensure the input file is restored so that the shell can continue to execute. Reported-by: Martijn Dekker <martijn@inlv.org> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to '')
-rw-r--r-- | src/input.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/input.c b/src/input.c index e53423c..ae0c4c8 100644 --- a/src/input.c +++ b/src/input.c @@ -479,6 +479,13 @@ popfile(void) } +void unwindfiles(struct parsefile *stop) +{ + while (parsefile != stop) + popfile(); +} + + /* * Return to top level. */ @@ -486,8 +493,7 @@ popfile(void) void popallfiles(void) { - while (parsefile != &basepf) - popfile(); + unwindfiles(&basepf); } |