From e991bc786af40623ae118eab9d400d6cd391d8c6 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Sat, 8 Jul 2017 19:19:18 -0400 Subject: 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. --- exec.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/exec.c b/exec.c index 5f3a804..3178dbe 100644 --- a/exec.c +++ b/exec.c @@ -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 -- cgit v1.2.3