libmount: mnt_table_over_fs() make child optional

Signed-off-by: Karel Zak <kzak@redhat.com>
This commit is contained in:
Karel Zak 2021-03-22 14:57:07 +01:00
parent 667c87c50c
commit 1c81dfff1a
1 changed files with 11 additions and 5 deletions

View File

@ -710,7 +710,7 @@ int mnt_table_next_child_fs(struct libmnt_table *tb, struct libmnt_iter *itr,
* mnt_table_over_fs:
* @tb: tab pointer
* @parent: pointer to parental FS
* @child: returns pointer to FS which over-mounting parent
* @child: returns pointer to FS which over-mounting parent (optional)
*
* This function returns by @child the first filesystenm which is over-mounted
* on @parent. It means the mountpoint of @child is the same as for @parent and
@ -735,23 +735,29 @@ int mnt_table_over_fs(struct libmnt_table *tb, struct libmnt_fs *parent,
struct libmnt_fs **child)
{
struct libmnt_iter itr;
struct libmnt_fs *fs = NULL;
int id;
const char *tgt;
if (!tb || !parent || !is_mountinfo(tb))
return -EINVAL;
if (child)
*child = NULL;
mnt_reset_iter(&itr, MNT_ITER_FORWARD);
id = mnt_fs_get_id(parent);
tgt = mnt_fs_get_target(parent);
while (mnt_table_next_fs(tb, &itr, child) == 0) {
if (mnt_fs_get_parent_id(*child) == id &&
mnt_fs_streq_target(*child, tgt) == 1)
while (mnt_table_next_fs(tb, &itr, &fs) == 0) {
if (mnt_fs_get_parent_id(fs) == id &&
mnt_fs_streq_target(fs, tgt) == 1) {
if (child)
*child = fs;
return 0;
}
}
*child = NULL;
return 1; /* nothing */
}