From f98a1c4a1cf61ff7d6483388ca1fac365fb0b31b Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Thu, 10 Nov 2022 11:02:19 -0500 Subject: Revert "exec: Don't flush if the user says no to -ok" From the bfs_ctx_flush() implementation: // Before executing anything, flush all open streams. This ensures that // - the user sees everything relevant before an -ok[dir] prompt But that only works if we call it before the prompt. This reverts commit 21344dfb72f9b65b366ca5f754f1bc35f52da3c7. --- src/exec.c | 6 +++--- tests/gnu/exec_flush.sh | 2 +- tests/gnu/ok_flush.out | 19 +++++++++++++++++++ tests/gnu/ok_flush.sh | 4 ++++ 4 files changed, 27 insertions(+), 4 deletions(-) create mode 100644 tests/gnu/ok_flush.out create mode 100644 tests/gnu/ok_flush.sh diff --git a/src/exec.c b/src/exec.c index b88a8b8..759582e 100644 --- a/src/exec.c +++ b/src/exec.c @@ -352,6 +352,9 @@ static void bfs_exec_closewd(struct bfs_exec *execbuf, const struct BFTW *ftwbuf /** Actually spawn the process. */ static int bfs_exec_spawn(const struct bfs_exec *execbuf) { + // Flush the context state for consistency with the external process + bfs_ctx_flush(execbuf->ctx); + if (execbuf->flags & BFS_EXEC_CONFIRM) { for (size_t i = 0; i < execbuf->argc; ++i) { if (fprintf(stderr, "%s ", execbuf->argv[i]) < 0) { @@ -368,9 +371,6 @@ static int bfs_exec_spawn(const struct bfs_exec *execbuf) { } } - // Flush cached state for consistency with the external process - bfs_ctx_flush(execbuf->ctx); - if (execbuf->flags & BFS_EXEC_MULTI) { bfs_exec_debug(execbuf, "Executing '%s' ... [%zu arguments] (size %zu)\n", execbuf->argv[0], execbuf->argc - 1, execbuf->arg_size); diff --git a/tests/gnu/exec_flush.sh b/tests/gnu/exec_flush.sh index aaeef6a..ff6088e 100644 --- a/tests/gnu/exec_flush.sh +++ b/tests/gnu/exec_flush.sh @@ -1,4 +1,4 @@ -# IO streams should be flushed before executing programs +# I/O streams should be flushed before executing programs invoke_bfs basic -print0 -exec echo found \; | tr '\0' ' ' >"$OUT" sort_output diff_output diff --git a/tests/gnu/ok_flush.out b/tests/gnu/ok_flush.out new file mode 100644 index 0000000..6731408 --- /dev/null +++ b/tests/gnu/ok_flush.out @@ -0,0 +1,19 @@ +basic ? found +basic/a ? found +basic/b ? found +basic/c ? found +basic/c/d ? found +basic/e ? found +basic/e/f ? found +basic/g ? found +basic/g/h ? found +basic/i ? found +basic/j ? found +basic/j/foo ? found +basic/k ? found +basic/k/foo ? found +basic/k/foo/bar ? found +basic/l ? found +basic/l/foo ? found +basic/l/foo/bar ? found +basic/l/foo/bar/baz ? found diff --git a/tests/gnu/ok_flush.sh b/tests/gnu/ok_flush.sh new file mode 100644 index 0000000..87c7298 --- /dev/null +++ b/tests/gnu/ok_flush.sh @@ -0,0 +1,4 @@ +# I/O streams should be flushed before -ok prompts +yes | invoke_bfs basic -printf '%p ? ' -ok echo found \; 2>&1 | tr '\0' ' ' | sed 's/?.*?/?/' >"$OUT" +sort_output +diff_output -- cgit v1.2.3