summaryrefslogtreecommitdiff
path: root/src/basic/mountpoint-util.c
diff options
context:
space:
mode:
authorDaan De Meyer <daan.j.demeyer@gmail.com>2023-03-14 22:00:11 +0100
committerDaan De Meyer <daan.j.demeyer@gmail.com>2023-03-15 11:51:06 +0100
commit9bf8441503c1aefe1ab3ee8e5a1bd90248c11677 (patch)
tree4c8df097b015921e63b1e2eb716756299c17d1f9 /src/basic/mountpoint-util.c
parentd77d42ed3ae95ee035dce4707777b077d1a9bf8b (diff)
downloadsystemd-9bf8441503c1aefe1ab3ee8e5a1bd90248c11677.tar.gz
mountpoint-util: Add path_get_mnt_id_at()
Diffstat (limited to 'src/basic/mountpoint-util.c')
-rw-r--r--src/basic/mountpoint-util.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/basic/mountpoint-util.c b/src/basic/mountpoint-util.c
index e285702388..24e38a34e8 100644
--- a/src/basic/mountpoint-util.c
+++ b/src/basic/mountpoint-util.c
@@ -355,11 +355,19 @@ int path_is_mount_point(const char *t, const char *root, int flags) {
return fd_is_mount_point(fd, last_path_component(t), flags);
}
-int path_get_mnt_id(const char *path, int *ret) {
+int path_get_mnt_id_at(int dir_fd, const char *path, int *ret) {
STRUCT_NEW_STATX_DEFINE(buf);
int r;
- if (statx(AT_FDCWD, path, AT_SYMLINK_NOFOLLOW|AT_NO_AUTOMOUNT, STATX_MNT_ID, &buf.sx) < 0) {
+ assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
+ assert(path);
+ assert(ret);
+
+ if (statx(dir_fd,
+ path,
+ AT_NO_AUTOMOUNT|(isempty(path) ? AT_EMPTY_PATH : AT_SYMLINK_NOFOLLOW),
+ STATX_MNT_ID,
+ &buf.sx) < 0) {
if (!ERRNO_IS_NOT_SUPPORTED(errno) && !ERRNO_IS_PRIVILEGE(errno))
return -errno;
@@ -371,11 +379,11 @@ int path_get_mnt_id(const char *path, int *ret) {
return 0;
}
- r = name_to_handle_at_loop(AT_FDCWD, path, NULL, ret, 0);
+ r = name_to_handle_at_loop(dir_fd, path, NULL, ret, isempty(path) ? AT_EMPTY_PATH : 0);
if (r == 0 || is_name_to_handle_at_fatal_error(r))
return r;
- return fd_fdinfo_mnt_id(AT_FDCWD, path, 0, ret);
+ return fd_fdinfo_mnt_id(dir_fd, path, isempty(path) ? AT_EMPTY_PATH : 0, ret);
}
bool fstype_is_network(const char *fstype) {