return memcmp_nn(a->f_handle, a->handle_bytes, b->f_handle, b->handle_bytes) == 0;
}
-int fd_is_mount_point(int fd, const char *filename, int flags) {
+int is_mount_point_at(int fd, const char *filename, int flags) {
bool fd_is_self;
int r;
if (path_equal(path, "/"))
return 1;
- /* we need to resolve symlinks manually, we can't just rely on fd_is_mount_point() to do that for us;
+ /* we need to resolve symlinks manually, we can't just rely on is_mount_point_at() to do that for us;
* if we have a structure like /bin -> /usr/bin/ and /usr is a mount point, then the parent that we
* look at needs to be /usr, not /. */
if (FLAGS_SET(flags, AT_SYMLINK_FOLLOW)) {
if (fd < 0)
return fd;
- return fd_is_mount_point(fd, last_path_component(path), flags);
+ return is_mount_point_at(fd, last_path_component(path), flags);
}
int path_get_mnt_id_at_fallback(int dir_fd, const char *path, int *ret) {
assert_se(rm_rf(tmp_dir, REMOVE_ROOT|REMOVE_PHYSICAL) == 0);
}
-TEST(fd_is_mount_point) {
+TEST(is_mount_point_at) {
_cleanup_(rm_rf_physical_and_freep) char *tmpdir = NULL;
_cleanup_free_ char *pwd = NULL;
_cleanup_close_ int fd = -EBADF;
assert_se(fd >= 0);
/* Not allowed, since "/" is a path, not a plain filename */
- assert_se(fd_is_mount_point(fd, "/", 0) == -EINVAL);
- assert_se(fd_is_mount_point(fd, "..", 0) == -EINVAL);
- assert_se(fd_is_mount_point(fd, "../", 0) == -EINVAL);
- assert_se(fd_is_mount_point(fd, "/proc", 0) == -EINVAL);
- assert_se(fd_is_mount_point(fd, "/proc/", 0) == -EINVAL);
- assert_se(fd_is_mount_point(fd, "proc/sys", 0) == -EINVAL);
- assert_se(fd_is_mount_point(fd, "proc/sys/", 0) == -EINVAL);
+ assert_se(is_mount_point_at(fd, "/", 0) == -EINVAL);
+ assert_se(is_mount_point_at(fd, "..", 0) == -EINVAL);
+ assert_se(is_mount_point_at(fd, "../", 0) == -EINVAL);
+ assert_se(is_mount_point_at(fd, "/proc", 0) == -EINVAL);
+ assert_se(is_mount_point_at(fd, "/proc/", 0) == -EINVAL);
+ assert_se(is_mount_point_at(fd, "proc/sys", 0) == -EINVAL);
+ assert_se(is_mount_point_at(fd, "proc/sys/", 0) == -EINVAL);
/* This one definitely is a mount point */
- assert_se(fd_is_mount_point(fd, "proc", 0) > 0);
- assert_se(fd_is_mount_point(fd, "proc/", 0) > 0);
+ assert_se(is_mount_point_at(fd, "proc", 0) > 0);
+ assert_se(is_mount_point_at(fd, "proc/", 0) > 0);
safe_close(fd);
fd = open("/tmp", O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOCTTY);
assert_se(fd >= 0);
assert_se(mkdtemp_malloc("/tmp/not-mounted-XXXXXX", &tmpdir) >= 0);
- assert_se(fd_is_mount_point(fd, basename(tmpdir), 0) == 0);
- assert_se(fd_is_mount_point(fd, strjoina(basename(tmpdir), "/"), 0) == 0);
+ assert_se(is_mount_point_at(fd, basename(tmpdir), 0) == 0);
+ assert_se(is_mount_point_at(fd, strjoina(basename(tmpdir), "/"), 0) == 0);
safe_close(fd);
fd = open("/proc", O_RDONLY|O_CLOEXEC|O_DIRECTORY|O_NOCTTY);
assert_se(fd >= 0);
- ASSERT_OK_POSITIVE(fd_is_mount_point(fd, NULL, 0));
- ASSERT_OK_POSITIVE(fd_is_mount_point(fd, "", 0));
- ASSERT_OK_POSITIVE(fd_is_mount_point(fd, ".", 0));
- ASSERT_OK_POSITIVE(fd_is_mount_point(fd, "./", 0));
- ASSERT_OK_ZERO(fd_is_mount_point(fd, "version", 0));
+ ASSERT_OK_POSITIVE(is_mount_point_at(fd, NULL, 0));
+ ASSERT_OK_POSITIVE(is_mount_point_at(fd, "", 0));
+ ASSERT_OK_POSITIVE(is_mount_point_at(fd, ".", 0));
+ ASSERT_OK_POSITIVE(is_mount_point_at(fd, "./", 0));
+ ASSERT_OK_ZERO(is_mount_point_at(fd, "version", 0));
ASSERT_OK(safe_getcwd(&pwd));
ASSERT_OK_ERRNO(fchdir(fd));
- ASSERT_OK_POSITIVE(fd_is_mount_point(AT_FDCWD, NULL, 0));
- ASSERT_OK_POSITIVE(fd_is_mount_point(AT_FDCWD, "", 0));
- ASSERT_OK_POSITIVE(fd_is_mount_point(AT_FDCWD, "./", 0));
+ ASSERT_OK_POSITIVE(is_mount_point_at(AT_FDCWD, NULL, 0));
+ ASSERT_OK_POSITIVE(is_mount_point_at(AT_FDCWD, "", 0));
+ ASSERT_OK_POSITIVE(is_mount_point_at(AT_FDCWD, "./", 0));
ASSERT_OK_ERRNO(chdir(pwd));
fd = open("/proc/version", O_RDONLY|O_CLOEXEC|O_NOCTTY);
assert_se(fd >= 0);
- r = fd_is_mount_point(fd, NULL, 0);
+ r = is_mount_point_at(fd, NULL, 0);
assert_se(IN_SET(r, 0, -ENOTDIR)); /* on old kernels we can't determine if regular files are mount points if we have no directory fd */
if (!mount_new_api_supported())
ASSERT_OK(readlinkat_malloc(fd, "regular", &t));
ASSERT_STREQ(t, "/usr");
- ASSERT_OK(fd_is_mount_point(fd, "regular", 0));
+ ASSERT_OK(is_mount_point_at(fd, "regular", 0));
}
TEST(ms_nosymfollow_supported) {