From: Karel Zak Date: Wed, 24 Nov 2021 11:20:15 +0000 (+0100) Subject: libmount: add mnt_fs_is_deleted() X-Git-Tag: v2.38-rc1~150 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=9c590e53800de83adbc111957ab008b410c1dd9d;p=thirdparty%2Futil-linux.git libmount: add mnt_fs_is_deleted() Signed-off-by: Karel Zak --- diff --git a/libmount/docs/libmount-sections.txt b/libmount/docs/libmount-sections.txt index 097e2f0663..7961dd4202 100644 --- a/libmount/docs/libmount-sections.txt +++ b/libmount/docs/libmount-sections.txt @@ -246,6 +246,7 @@ mnt_fs_get_userdata mnt_fs_get_user_options mnt_fs_get_vfs_options mnt_fs_get_vfs_options_all +mnt_fs_is_deleted mnt_fs_is_kernel mnt_fs_is_netfs mnt_fs_is_pseudofs diff --git a/libmount/src/fs.c b/libmount/src/fs.c index b44d310ee2..163f70bd3a 100644 --- a/libmount/src/fs.c +++ b/libmount/src/fs.c @@ -651,6 +651,17 @@ int mnt_fs_is_regularfs(struct libmnt_fs *fs) || mnt_fs_is_swaparea(fs)); } +/** + * mnt_fs_is_deleted: + * @fs: filesystem + * + * Returns: 1 if the filesystem target is a marked as deleted by kernel + */ +int mnt_fs_is_deleted(struct libmnt_fs *fs) +{ + return mnt_fs_get_flags(fs) & MNT_FS_DELETED; +} + /** * mnt_fs_get_fstype: * @fs: fstab/mtab/mountinfo entry pointer diff --git a/libmount/src/libmount.h.in b/libmount/src/libmount.h.in index 3bcf746828..a96778754c 100644 --- a/libmount/src/libmount.h.in +++ b/libmount/src/libmount.h.in @@ -512,6 +512,7 @@ extern int mnt_fs_match_options(struct libmnt_fs *fs, const char *options); extern int mnt_fs_print_debug(struct libmnt_fs *fs, FILE *file); extern int mnt_fs_is_kernel(struct libmnt_fs *fs); +extern int mnt_fs_is_deleted(struct libmnt_fs *fs); extern int mnt_fs_is_swaparea(struct libmnt_fs *fs); extern int mnt_fs_is_netfs(struct libmnt_fs *fs); extern int mnt_fs_is_pseudofs(struct libmnt_fs *fs); diff --git a/libmount/src/libmount.sym b/libmount/src/libmount.sym index aa96091b1a..15b738394c 100644 --- a/libmount/src/libmount.sym +++ b/libmount/src/libmount.sym @@ -365,4 +365,5 @@ MOUNT_2_37 { MOUNT_2_38 { mnt_fs_is_regularfs; + mnt_fs_is_deleted; } MOUNT_2_37; diff --git a/libmount/src/mountP.h b/libmount/src/mountP.h index b47640daac..a4e1c62069 100644 --- a/libmount/src/mountP.h +++ b/libmount/src/mountP.h @@ -228,6 +228,7 @@ struct libmnt_fs { #define MNT_FS_SWAP (1 << 3) /* swap device */ #define MNT_FS_KERNEL (1 << 4) /* data from /proc/{mounts,self/mountinfo} */ #define MNT_FS_MERGED (1 << 5) /* already merged data from /run/mount/utab */ +#define MNT_FS_DELETED (1 << 6) /* target path in mountinfo contains "(deleted)" */ /* * mtab/fstab/mountinfo file diff --git a/libmount/src/tab_parse.c b/libmount/src/tab_parse.c index 917779ab6d..d94233ca9f 100644 --- a/libmount/src/tab_parse.c +++ b/libmount/src/tab_parse.c @@ -229,8 +229,10 @@ static int mnt_parse_mountinfo_line(struct libmnt_fs *fs, const char *s) /* remove "\040(deleted)" suffix */ p = (char *) endswith(fs->target, PATH_DELETED_SUFFIX); - if (p && *p) + if (p && *p) { *p = '\0'; + fs->flags |= MNT_FS_DELETED; + } s = skip_separator(s);