AT_REMOVEDIR
rv = unlinkat(rt_dir_prefix, user, AT_REMOVEDIR);
unlinkat(fd, dp->d_name, AT_REMOVEDIR);
if (unlinkat(rt_dir_prefix, user, AT_REMOVEDIR) != 0) {
if ((flag & ~(AT_REMOVEDIR | AT_RESOLVE_BENEATH)) != 0)
if ((flag & AT_REMOVEDIR) != 0)
ATF_REQUIRE_EQ(0, unlinkat(AT_FDCWD, path, AT_REMOVEDIR));
ATF_REQUIRE_EQ(-1, unlinkat(AT_FDCWD, errpath, AT_REMOVEDIR));
EXPECT_NOTCAPABLE(unlinkat(cap_dfd_no_unlink, "cap_subdir", AT_REMOVEDIR));
EXPECT_OK(unlinkat(cap_dfd_all, "cap_subdir", AT_REMOVEDIR));
EXPECT_OK(unlinkat(dirfd, "cap_mkdirat", AT_REMOVEDIR));
rc = unlinkat(dfd_cap, "cap_unlinkat", AT_REMOVEDIR);
unlinkat(dirfd, "cap_unlinkat", AT_REMOVEDIR);
EXPECT_OK(unlinkat(tmpfd, "cap_dirops", AT_REMOVEDIR));
EXPECT_OK(unlinkat(dfd, "subdir", AT_REMOVEDIR));
error = unlinkat(dfd, "testdir", AT_REMOVEDIR);
tests[13].tests[3].params[2].i = AT_REMOVEDIR;
tests[13].tests[4].params[2].i = AT_REMOVEDIR;
tests[13].tests[5].params[2].i = AT_REMOVEDIR;
CHECK(ret == -1 || unlinkat(dirfd, "cap_mkdirat", AT_REMOVEDIR) == 0);
ret = unlinkat(dfd_cap, "cap_unlinkat", AT_REMOVEDIR);
CHECK(ret == 0 || unlinkat(dirfd, "cap_unlinkat", AT_REMOVEDIR) == 0);
(void)unlinkat(tmpfd, dir + strlen("/tmp/"), AT_REMOVEDIR);
tests[13].tests[3].params[2].i = AT_REMOVEDIR;
tests[13].tests[4].params[2].i = AT_REMOVEDIR;
tests[13].tests[5].params[2].i = AT_REMOVEDIR;
if (unlinkat(rootfd, path, AT_REMOVEDIR) == -1) {