diff --git a/libmount/src/tab.c b/libmount/src/tab.c index 465708f61..0d5c11566 100644 --- a/libmount/src/tab.c +++ b/libmount/src/tab.c @@ -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 */ }