git: ee213339f4b2 - main - fts: address post-merge feedback on fts_set_test.c
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 05 Jun 2026 15:09:48 UTC
The branch main has been updated by asomers:
URL: https://cgit.FreeBSD.org/src/commit/?id=ee213339f4b21782cd1b44086ff9b7fe1fd682c5
commit ee213339f4b21782cd1b44086ff9b7fe1fd682c5
Author: Jitendra Bhati <bhatijitendra2022@gmail.com>
AuthorDate: 2026-06-03 22:39:45 +0000
Commit: Alan Somers <asomers@FreeBSD.org>
CommitDate: 2026-06-05 15:06:33 +0000
fts: address post-merge feedback on fts_set_test.c
Per review by des@:
- Remove fts_check_debug() which has no effect in fts_set_test.c, and
remove unused #include "fts_test.h"
- Add errno = 0 before fts_read() so errno check is meaningful
- Remove fts_lexical_compar where traversal order does not matter
- Change int boolean flags to bool throughout
- Use !saw_inside instead of saw_inside == false
- Move fts_set_clientptr/fts_get_clientptr test inside fts_read()
loop so the pointer is exercised during active traversal
Fixes: 940142d6103 ("lib/libc/tests/gen: add fts_set() tests")
Sponsored by: Google LLC (GSoC 2026)
Reviewed by: des, asomers
MFC after: 2 weeks
Pull Request: https://github.com/freebsd/freebsd-src/pull/2258
---
lib/libc/tests/gen/fts_set_test.c | 61 ++++++++++++++++++++++-----------------
1 file changed, 34 insertions(+), 27 deletions(-)
diff --git a/lib/libc/tests/gen/fts_set_test.c b/lib/libc/tests/gen/fts_set_test.c
index 340af648c472..26cca82101a6 100644
--- a/lib/libc/tests/gen/fts_set_test.c
+++ b/lib/libc/tests/gen/fts_set_test.c
@@ -22,8 +22,6 @@
#include <atf-c.h>
-#include "fts_test.h"
-
/*
* fts_set with invalid options must return non-zero with EINVAL.
* Note: fts_set returns 1 (not -1) on error.
@@ -68,11 +66,10 @@ ATF_TC_BODY(again, tc)
ATF_REQUIRE_EQ(0, mkdir("dir", 0755));
ATF_REQUIRE_EQ(0, close(creat("dir/file", 0644)));
- ATF_REQUIRE((fts = fts_open(paths, FTS_PHYSICAL,
- fts_lexical_compar)) != NULL);
+ ATF_REQUIRE((fts = fts_open(paths, FTS_PHYSICAL, NULL)) != NULL);
revisit_count = 0;
- while ((ent = fts_read(fts)) != NULL) {
+ for (errno = 0; (ent = fts_read(fts)) != NULL; errno = 0) {
if (ent->fts_info == FTS_F && revisit_count == 0) {
ATF_REQUIRE_EQ_MSG(0,
fts_set(fts, ent, FTS_AGAIN),
@@ -142,25 +139,24 @@ ATF_TC_BODY(follow_symlink_to_file, tc)
char *paths[] = { "dir", NULL };
FTS *fts;
FTSENT *ent;
- int followed;
+ bool followed;
ATF_REQUIRE_EQ(0, mkdir("dir", 0755));
ATF_REQUIRE_EQ(0, close(creat("dir/target", 0644)));
ATF_REQUIRE_EQ(0, symlink("target", "dir/link"));
- ATF_REQUIRE((fts = fts_open(paths, FTS_PHYSICAL,
- fts_lexical_compar)) != NULL);
+ ATF_REQUIRE((fts = fts_open(paths, FTS_PHYSICAL, NULL)) != NULL);
- followed = 0;
+ followed = false;
while ((ent = fts_read(fts)) != NULL) {
if (ent->fts_info == FTS_SL &&
strcmp(ent->fts_name, "link") == 0)
ATF_REQUIRE_EQ(0, fts_set(fts, ent, FTS_FOLLOW));
else if (ent->fts_info == FTS_F &&
strcmp(ent->fts_name, "link") == 0)
- followed = 1;
+ followed = true;
}
- ATF_CHECK_MSG(followed != 0,
+ ATF_CHECK_MSG(followed,
"FTS_FOLLOW on symlink-to-file must yield FTS_F");
ATF_REQUIRE_EQ_MSG(0, fts_close(fts), "fts_close(): %m");
@@ -181,17 +177,16 @@ ATF_TC_BODY(follow_symlink_to_dir, tc)
char *paths[] = { "dir", NULL };
FTS *fts;
FTSENT *ent;
- int saw_inside;
+ bool saw_inside;
ATF_REQUIRE_EQ(0, mkdir("dir", 0755));
ATF_REQUIRE_EQ(0, mkdir("dir/real", 0755));
ATF_REQUIRE_EQ(0, close(creat("dir/real/inside", 0644)));
ATF_REQUIRE_EQ(0, symlink("real", "dir/link"));
- ATF_REQUIRE((fts = fts_open(paths, FTS_PHYSICAL,
- fts_lexical_compar)) != NULL);
+ ATF_REQUIRE((fts = fts_open(paths, FTS_PHYSICAL, NULL)) != NULL);
- saw_inside = 0;
+ saw_inside = false;
while ((ent = fts_read(fts)) != NULL) {
if (ent->fts_info == FTS_SL &&
strcmp(ent->fts_name, "link") == 0)
@@ -199,9 +194,9 @@ ATF_TC_BODY(follow_symlink_to_dir, tc)
if (ent->fts_info == FTS_F &&
strcmp(ent->fts_name, "inside") == 0 &&
strcmp(ent->fts_path, "dir/link/inside") == 0)
- saw_inside = 1;
+ saw_inside = true;
}
- ATF_CHECK_MSG(saw_inside != 0,
+ ATF_CHECK_MSG(saw_inside,
"FTS_FOLLOW on symlink-to-dir should descend and visit 'inside'");
ATF_REQUIRE_EQ_MSG(0, fts_close(fts), "fts_close(): %m");
@@ -259,25 +254,24 @@ ATF_TC_BODY(skip, tc)
char *paths[] = { "dir", NULL };
FTS *fts;
FTSENT *ent;
- int saw_inside;
+ bool saw_inside;
ATF_REQUIRE_EQ(0, mkdir("dir", 0755));
ATF_REQUIRE_EQ(0, mkdir("dir/skip_me", 0755));
ATF_REQUIRE_EQ(0, close(creat("dir/skip_me/inside", 0644)));
ATF_REQUIRE_EQ(0, close(creat("dir/sibling", 0644)));
- ATF_REQUIRE((fts = fts_open(paths, FTS_PHYSICAL,
- fts_lexical_compar)) != NULL);
+ ATF_REQUIRE((fts = fts_open(paths, FTS_PHYSICAL, NULL)) != NULL);
- saw_inside = 0;
+ saw_inside = false;
while ((ent = fts_read(fts)) != NULL) {
if (ent->fts_info == FTS_D &&
strcmp(ent->fts_name, "skip_me") == 0)
ATF_REQUIRE_EQ(0, fts_set(fts, ent, FTS_SKIP));
if (strcmp(ent->fts_name, "inside") == 0)
- saw_inside = 1;
+ saw_inside = true;
}
- ATF_CHECK_MSG(saw_inside == 0,
+ ATF_CHECK_MSG(!saw_inside,
"FTS_SKIP: 'inside' must not have been visited");
ATF_REQUIRE_EQ_MSG(0, fts_close(fts), "fts_close(): %m");
@@ -295,18 +289,32 @@ ATF_TC_HEAD(clientptr_roundtrip, tc)
}
ATF_TC_BODY(clientptr_roundtrip, tc)
{
- char *paths[] = { ".", NULL };
+ char *paths[] = { "dir", NULL };
FTS *fts;
+ FTSENT *ent;
int value = 42;
+ ATF_REQUIRE_EQ(0, mkdir("dir", 0755));
+ ATF_REQUIRE_EQ(0, close(creat("dir/file", 0644)));
+
ATF_REQUIRE((fts = fts_open(paths, FTS_PHYSICAL, NULL)) != NULL);
+ /* Initially NULL. */
ATF_CHECK_EQ(NULL, fts_get_clientptr(fts));
fts_set_clientptr(fts, &value);
- ATF_CHECK_EQ_MSG(&value, fts_get_clientptr(fts),
- "fts_get_clientptr did not return the stored pointer");
+ while ((ent = fts_read(fts)) != NULL) {
+ /*
+ * Verify the pointer is accessible and correct
+ * while traversal is active.
+ */
+ ATF_CHECK_EQ_MSG(&value, fts_get_clientptr(fts),
+ "fts_get_clientptr did not return the stored pointer "
+ "for entry '%s'", ent->fts_name);
+ }
+
+ /* Overwrite with NULL, verify. */
fts_set_clientptr(fts, NULL);
ATF_CHECK_EQ(NULL, fts_get_clientptr(fts));
@@ -346,7 +354,6 @@ ATF_TC_BODY(get_stream_backpointer, tc)
ATF_TP_ADD_TCS(tp)
{
- fts_check_debug();
ATF_TP_ADD_TC(tp, invalid_options);
ATF_TP_ADD_TC(tp, again);
ATF_TP_ADD_TC(tp, again_consecutive);