diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2017-07-08 19:19:18 -0400 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2017-07-08 19:27:10 -0400 |
commit | e991bc786af40623ae118eab9d400d6cd391d8c6 (patch) | |
tree | 446ad27d225293271a73f5bd970dbeddea62dceb | |
parent | 2a3eab05901f32aeabf0e4b45d5b50fdf056e23d (diff) | |
download | bfs-e991bc786af40623ae118eab9d400d6cd391d8c6.tar.xz |
exec: Clear errno when a multi-exec doesn't fail
This fixes strange "Inappropriate ioctl for device" errors when using
-exec ... + with output redirection. errno was set to ENOTTY by the
isatty() call during startup for color auto-detection, and never cleared
before eval_exec() wants to check if anything went wrong.
-rw-r--r-- | exec.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -449,6 +449,8 @@ static int bfs_exec_flush(struct bfs_exec *execbuf) { } } + int error = errno; + bfs_exec_closewd(execbuf, NULL); for (size_t i = execbuf->placeholder; i < last_path; ++i) { @@ -457,6 +459,7 @@ static int bfs_exec_flush(struct bfs_exec *execbuf) { execbuf->argc = execbuf->placeholder; execbuf->arg_size = 0; + errno = error; return ret; } @@ -544,7 +547,9 @@ out: int bfs_exec(struct bfs_exec *execbuf, const struct BFTW *ftwbuf) { if (execbuf->flags & BFS_EXEC_MULTI) { - if (bfs_exec_multi(execbuf, ftwbuf) != 0) { + if (bfs_exec_multi(execbuf, ftwbuf) == 0) { + errno = 0; + } else { execbuf->ret = -1; } // -exec ... + never returns false |