diff options
author | Herbert Xu <herbert@gondor.apana.org.au> | 2010-05-27 15:03:46 +0800 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2010-05-27 15:03:46 +0800 |
commit | b112dc08c6c86b8b82d60b1169ccab51921241ca (patch) | |
tree | 04bb75f4f823114f566d68ec52745421268baa99 /src/redir.h | |
parent | [REDIR] Move null redirect checks into caller (diff) | |
download | dash-b112dc08c6c86b8b82d60b1169ccab51921241ca.tar.gz dash-b112dc08c6c86b8b82d60b1169ccab51921241ca.zip |
[REDIR] Fix popredir on abnormal exit from built-in
Just like the poplocalvar problem recently fixed, redirections can also be leaked in case of an abnormal exit. This patch fixes it using the same method as poplocalvar, by storing the previous redirection state and restoring to that point. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'src/redir.h')
-rw-r--r-- | src/redir.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/redir.h b/src/redir.h index d1d160e..8e56995 100644 --- a/src/redir.h +++ b/src/redir.h @@ -41,10 +41,13 @@ #endif #define REDIR_SAVEFD2 03 /* set preverrout */ +struct redirtab; union node; void redirect(union node *, int); void popredir(int); void clearredir(void); int savefd(int, int); int redirectsafe(union node *, int); +void unwindredir(struct redirtab *stop); +struct redirtab *pushredir(union node *redir); |