if (!FLAGS_SET(st.nsx.stx_mask, STATX_MNT_ID)) {
int mntid;
- r = path_get_mnt_id_at(dir_fd, "", &mntid);
+ r = path_get_mnt_id_at_fallback(dir_fd, "", &mntid);
if (r < 0) {
if (ERRNO_IS_NOT_SUPPORTED(r))
return true; /* skip the mount ID check */
if (!FLAGS_SET(pst.nsx.stx_mask, STATX_MNT_ID)) {
int mntid;
- r = path_get_mnt_id_at(dir_fd, "..", &mntid);
+ r = path_get_mnt_id_at_fallback(dir_fd, "..", &mntid);
if (r < 0) {
if (ERRNO_IS_NOT_SUPPORTED(r))
return true; /* skip the mount ID check */
return fd_is_mount_point(fd, last_path_component(t), flags);
}
+int path_get_mnt_id_at_fallback(int dir_fd, const char *path, int *ret) {
+ int r;
+
+ assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
+ assert(ret);
+
+ 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(dir_fd, path, isempty(path) ? AT_EMPTY_PATH : 0, ret);
+}
+
int path_get_mnt_id_at(int dir_fd, const char *path, int *ret) {
STRUCT_NEW_STATX_DEFINE(buf);
- int r;
assert(dir_fd >= 0 || dir_fd == AT_FDCWD);
assert(ret);
return 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(dir_fd, path, isempty(path) ? AT_EMPTY_PATH : 0, ret);
+ return path_get_mnt_id_at_fallback(dir_fd, path, ret);
}
bool fstype_is_network(const char *fstype) {
int name_to_handle_at_loop(int fd, const char *path, struct file_handle **ret_handle, int *ret_mnt_id, int flags);
+int path_get_mnt_id_at_fallback(int dir_fd, const char *path, int *ret);
int path_get_mnt_id_at(int dir_fd, const char *path, int *ret);
static inline int path_get_mnt_id(const char *path, int *ret) {
return path_get_mnt_id_at(AT_FDCWD, path, ret);