diff options
author | Tavian Barnes <tavianator@tavianator.com> | 2017-02-09 18:35:25 -0500 |
---|---|---|
committer | Tavian Barnes <tavianator@tavianator.com> | 2017-02-09 18:35:25 -0500 |
commit | 49415accb857450cdeb4397c31cbe4d6e6e9591f (patch) | |
tree | f0530479eed24de99db9bcb02527aa04339e94fd | |
parent | c0d14f854ffedd29cc6d53c8033c72573a63273e (diff) | |
download | bfs-49415accb857450cdeb4397c31cbe4d6e6e9591f.tar.xz |
Don't close stdin for -ok or -okdir
Turns out it violates POSIX, even though GNU find does it.
-rw-r--r-- | eval.c | 9 | ||||
-rwxr-xr-x | tests.sh | 13 | ||||
-rw-r--r-- | tests/test_0094.out | 19 | ||||
-rw-r--r-- | tests/test_0095.out | 19 |
4 files changed, 45 insertions, 15 deletions
@@ -468,17 +468,8 @@ bool eval_exec(const struct expr *expr, struct eval_state *state) { exec_chdir(ftwbuf); } - if (expr->exec_flags & EXEC_CONFIRM) { - if (redirect(STDIN_FILENO, "/dev/null", O_RDONLY) < 0) { - perror("redirect()"); - goto exit; - } - } - execvp(argv[0], argv); perror("execvp()"); - - exit: _Exit(EXIT_FAILURE); } @@ -609,15 +609,16 @@ function test_0093() { } function test_0094() { - [ "$GNU" ] || return 0 - # -ok should close stdin for the executed command - yes | $BFS basic -ok cat ';' 2>/dev/null + [ "$BSD" ] || return 0 + # -ok should *not* close stdin + # See https://savannah.gnu.org/bugs/?24561 + yes | bfs_diff basic -ok bash -c "printf '%s? ' {} && head -n1" \; 2>/dev/null } function test_0095() { - [ "$GNU" ] || return 0 - # -okdir should close stdin for the executed command - yes | $BFS basic -okdir cat ';' 2>/dev/null + [ "$BSD" ] || return 0 + # -okdir should *not* close stdin + yes | bfs_diff basic -okdir bash -c "printf '%s? ' {} && head -n1" \; 2>/dev/null } function test_0096() { diff --git a/tests/test_0094.out b/tests/test_0094.out new file mode 100644 index 0000000..30b57fd --- /dev/null +++ b/tests/test_0094.out @@ -0,0 +1,19 @@ +basic? y +basic/a? y +basic/b? y +basic/c? y +basic/e? y +basic/g? y +basic/i? y +basic/j? y +basic/k? y +basic/l? y +basic/c/d? y +basic/e/f? y +basic/g/h? y +basic/j/foo? y +basic/k/foo? y +basic/l/foo? y +basic/k/foo/bar? y +basic/l/foo/bar? y +basic/l/foo/bar/baz? y diff --git a/tests/test_0095.out b/tests/test_0095.out new file mode 100644 index 0000000..ef2a68b --- /dev/null +++ b/tests/test_0095.out @@ -0,0 +1,19 @@ +./a? y +./b? y +./bar? y +./bar? y +./basic? y +./baz? y +./c? y +./d? y +./e? y +./f? y +./foo? y +./foo? y +./foo? y +./g? y +./h? y +./i? y +./j? y +./k? y +./l? y |