]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsblk: process_one_device() refactoring
authorKarel Zak <kzak@redhat.com>
Mon, 15 Oct 2018 14:12:33 +0000 (16:12 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 7 Dec 2018 11:32:57 +0000 (12:32 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
misc-utils/lsblk.c

index bb16c23c13231381d13578b33c60b09426af4fff..e5312701e5e46eb83b45a381ff7c234694dda7c4 100644 (file)
@@ -1263,7 +1263,7 @@ static int process_dependencies(struct lsblk_device *dev, struct lsblk_device *p
 {
 #ifdef SUCK
        if (do_partitions && dev->npartitions)
-               list_partitions(dev, parent, part_name);                /* partitions + whole-disk */
+               process_partitions(dev, parent, part_name);             /* partitions + whole-disk */
 
        return list_deps(dev);
 #endif
@@ -1318,9 +1318,9 @@ done:
        return 0;
 }
 
-static int process_one_device(char *devname)
+static int process_one_device(struct lsblk_devtree *tr, char *devname)
 {
-       struct lsblk_device parent = { .parent = NULL }, dev = { .parent = NULL };
+       struct lsblk_device *dev = NULL;
        struct stat st;
        char buf[PATH_MAX + 1], *name = NULL, *diskname = NULL;
        dev_t disk = 0;
@@ -1358,22 +1358,35 @@ static int process_one_device(char *devname)
                /*
                 * Device is not a partition.
                 */
-               if (set_device(&dev, NULL, NULL, name))
+               dev = devtree_get_device_or_new(tr, NULL, NULL, name);
+               if (!dev)
                        goto leave;
-               process_dependencies(&dev, NULL, !lsblk->inverse, NULL);
+
+               if (process_dependencies(dev, NULL, !lsblk->inverse, NULL) == 0)
+                       lsblk_devtree_add_root(tr, dev);
        } else {
                /*
-                * Partition, read sysfs name of the device.
+                * Partition, read sysfs name of the disk device
                 */
-               if (set_device(&parent, NULL, NULL, diskname))
+               struct lsblk_device *parent;
+
+               parent = devtree_get_device_or_new(tr, NULL, NULL, diskname);
+               if (!parent)
                        goto leave;
-               if (set_device(&dev, &parent, &parent, name))
+
+               dev = devtree_get_device_or_new(tr, parent, parent, name);
+               if (!dev)
                        goto leave;
 
+               if (process_dependencies(dev, NULL, 1, NULL) == 0)
+                       lsblk_devtree_add_root(tr, dev);
+
+/*
                if (lsblk->inverse)
-                       process_dependencies(&parent, &dev, 1, dev.name);
+                       process_dependencies(parent, dev, 1, dev->name);
                else
-                       process_dependencies(&dev, &parent, 1, NULL);
+                       process_dependencies(dev, parent, 1, NULL);
+*/
        }
 
        rc = 0;
@@ -1811,7 +1824,7 @@ int main(int argc, char *argv[])
                int cnt = 0, cnt_err = 0;
 
                while (optind < argc) {
-                       if (process_one_device(argv[optind++]) != 0)
+                       if (process_one_device(tr, argv[optind++]) != 0)
                                cnt_err++;
                        cnt++;
                }