assert_se(inode_same_at(fd1, NULL, fd2_check, NULL, AT_EMPTY_PATH) > 0);
}
-static int intro(void) {
- arg_test_dir = saved_argv[1];
- return EXIT_SUCCESS;
-}
-
TEST(readlinkat_malloc) {
_cleanup_(rm_rf_physical_and_freep) char *t = NULL;
_cleanup_close_ int tfd = -EBADF, fd = -EBADF;
q = mfree(q);
}
+TEST(xat_fdroot) {
+ _cleanup_free_ char *p = NULL;
+ ASSERT_OK(fd_get_path(XAT_FDROOT, &p));
+ ASSERT_STREQ(p, "/");
+
+ _cleanup_close_ int fd = -EBADF;
+ fd = fd_reopen(XAT_FDROOT, O_CLOEXEC);
+ ASSERT_OK(fd);
+
+ ASSERT_OK_POSITIVE(path_is_root_at(XAT_FDROOT, NULL));
+ ASSERT_OK_POSITIVE(path_is_root_at(XAT_FDROOT, "."));
+ ASSERT_OK_POSITIVE(path_is_root_at(XAT_FDROOT, "/"));
+
+ ASSERT_OK_POSITIVE(path_is_root_at(fd, NULL));
+ ASSERT_OK_POSITIVE(path_is_root_at(fd, "."));
+ ASSERT_OK_POSITIVE(path_is_root_at(fd, "/"));
+
+ ASSERT_OK_POSITIVE(fds_are_same_mount(fd, fd));
+ ASSERT_OK_POSITIVE(fds_are_same_mount(XAT_FDROOT, XAT_FDROOT));
+ ASSERT_OK_POSITIVE(fds_are_same_mount(fd, XAT_FDROOT));
+ ASSERT_OK_POSITIVE(fds_are_same_mount(XAT_FDROOT, fd));
+
+ ASSERT_OK_POSITIVE(dir_fd_is_root(XAT_FDROOT));
+ ASSERT_OK_POSITIVE(dir_fd_is_root(fd));
+
+ ASSERT_OK_POSITIVE(dir_fd_is_root_or_cwd(XAT_FDROOT));
+ ASSERT_OK_POSITIVE(dir_fd_is_root_or_cwd(AT_FDCWD));
+ ASSERT_OK_POSITIVE(dir_fd_is_root_or_cwd(fd));
+
+ ASSERT_OK(access_fd(XAT_FDROOT, F_OK));
+ ASSERT_OK(access_fd(fd, F_OK));
+
+ fd = safe_close(fd);
+ fd = xopenat(XAT_FDROOT, ".", O_RDONLY);
+ ASSERT_OK(fd);
+
+ fd = safe_close(fd);
+ fd = xopenat(XAT_FDROOT, "/", O_RDONLY);
+ ASSERT_OK(fd);
+
+ ASSERT_OK(fd_verify_directory(fd));
+ ASSERT_OK(fd_verify_directory(XAT_FDROOT));
+
+ ASSERT_OK(fd_verify_linked(fd));
+ ASSERT_OK(fd_verify_linked(XAT_FDROOT));
+
+ int a = fd_is_read_only_fs(fd);
+ ASSERT_OK(a);
+ int b = fd_is_read_only_fs(XAT_FDROOT);
+ ASSERT_OK(b);
+ ASSERT_EQ(a, b);
+
+ a = fd_is_temporary_fs(fd);
+ ASSERT_OK(a);
+ b = fd_is_temporary_fs(XAT_FDROOT);
+ ASSERT_OK(b);
+ ASSERT_EQ(a, b);
+}
+
+static int intro(void) {
+ arg_test_dir = saved_argv[1];
+ return EXIT_SUCCESS;
+}
+
DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);