summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2025-05-26 10:35:24 -0400
committerTavian Barnes <tavianator@tavianator.com>2025-05-26 10:45:45 -0400
commit6fa72ff42d95dfd883d59ce7cf6bdc74abebf015 (patch)
treeba257f3e9dd30701d9c8d17024295e358c7d3a06
parentd26458b7235e70edf4ca57d8d8db70a01e1afbf4 (diff)
downloadbfs-6fa72ff42d95dfd883d59ce7cf6bdc74abebf015.tar.xz
tests/posix: Add a test for POSIX bug 1859
... which requires we process root paths strictly in-order.
-rw-r--r--src/bftw.c3
-rw-r--r--tests/posix/root_order.out4
-rw-r--r--tests/posix/root_order.sh6
3 files changed, 12 insertions, 1 deletions
diff --git a/src/bftw.c b/src/bftw.c
index f822456..6d1475e 100644
--- a/src/bftw.c
+++ b/src/bftw.c
@@ -1485,7 +1485,8 @@ fail:
/** Check if we should stat() a file asynchronously. */
static bool bftw_should_ioq_stat(struct bftw_state *state, struct bftw_file *file) {
- // To avoid surprising users too much, process the roots in order
+ // POSIX wants the root paths to be processed in order
+ // See https://www.austingroupbugs.net/view.php?id=1859
if (file->depth == 0) {
return false;
}
diff --git a/tests/posix/root_order.out b/tests/posix/root_order.out
new file mode 100644
index 0000000..ea94276
--- /dev/null
+++ b/tests/posix/root_order.out
@@ -0,0 +1,4 @@
+basic/a
+basic/b
+basic/c/d
+basic/e/f
diff --git a/tests/posix/root_order.sh b/tests/posix/root_order.sh
new file mode 100644
index 0000000..86adf20
--- /dev/null
+++ b/tests/posix/root_order.sh
@@ -0,0 +1,6 @@
+# Root paths must be processed in order
+# https://www.austingroupbugs.net/view.php?id=1859
+
+# -size forces a stat(), which we don't want to be async
+invoke_bfs basic/{a,b,c/d,e/f} -size -1000 >"$OUT"
+diff_output