]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: mnt_table_over_fs() make child optional
authorKarel Zak <kzak@redhat.com>
Mon, 22 Mar 2021 13:57:07 +0000 (14:57 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 22 Mar 2021 14:00:47 +0000 (15:00 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
libmount/src/tab.c

index 465708f61818e5d06cc584b232b4b36c0bf23aa6..0d5c11566c81217120c1791e9483c17ea6650053 100644 (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 */
 }