Loading...
/* * Regression tests for rdar://116080732, rdar://144349691 */ #include <fts.h> #include <darwintest.h> #include <darwintest_utils.h> T_DECL(fts_nappend, "FTS deduplicates trailing slashes (rdar://116080732)", T_META_NAMESPACE("Libc.regression")) { char *expectv[] = { "/bin", "/usr/bin", NULL }, **expect = expectv; char *paths[] = { "/", "/usr/", NULL }; FTS *fts; FTSENT *ent; fts = fts_open(paths, FTS_PHYSICAL, NULL); T_ASSERT_POSIX_NOTNULL(fts, "fts_open()"); while ((ent = fts_read(fts)) != NULL) { /* look only at directories */ if (ent->fts_info != FTS_D) continue; /* don't descend, or we'll be at it all day */ if (ent->fts_level > 0) fts_set(fts, ent, FTS_SKIP); /* look only at entries named bin */ if (strcmp(ent->fts_name, "bin") != 0) continue; T_ASSERT_NOTNULL(*expect, NULL); T_EXPECT_EQ_STR(ent->fts_path, *expect, "%s", *expect); expect++; } T_EXPECT_POSIX_ZERO(errno, "fts_read()"); T_EXPECT_POSIX_SUCCESS(fts_close(fts), "fts_close()"); T_EXPECT_NULL(*expect, NULL); } T_DECL(fts_emptydir, "FTS preserves trailing slashes on empty directories (rdar://144349691)", T_META_NAMESPACE("Libc.regression")) { char dirname[12] = "fts.XXXXXX"; char *paths[] = { dirname, NULL }; FTS *fts; FTSENT *ent; T_SETUPBEGIN; T_ASSERT_POSIX_ZERO(chdir(dt_tmpdir()), NULL); T_ASSERT_POSIX_NOTNULL(mkdtemp(dirname), "mkdtemp()"); dirname[10] = '/'; fts = fts_open(paths, FTS_PHYSICAL|FTS_NOCHDIR, NULL); T_ASSERT_POSIX_NOTNULL(fts, "fts_open()"); T_SETUPEND; /* pre-order */ T_ASSERT_POSIX_NOTNULL((ent = fts_read(fts)), NULL); T_EXPECT_EQ(FTS_D, ent->fts_info, NULL); T_EXPECT_EQ_STR(ent->fts_path, dirname, NULL); /* post-order */ T_ASSERT_POSIX_NOTNULL((ent = fts_read(fts)), NULL); T_EXPECT_EQ(FTS_DP, ent->fts_info, NULL); T_EXPECT_EQ_STR(ent->fts_path, dirname, NULL); /* done */ T_SETUPBEGIN; T_ASSERT_NULL((ent = fts_read(fts)), NULL); T_EXPECT_POSIX_ZERO(errno, "fts_read()"); T_EXPECT_POSIX_SUCCESS(fts_close(fts), "fts_close()"); dirname[10] = '\0'; T_EXPECT_POSIX_ZERO(rmdir(dirname), NULL); T_SETUPEND; } |