summaryrefslogtreecommitdiffstats
path: root/misc-utils
diff options
context:
space:
mode:
authorKarel Zak2018-10-15 16:12:33 +0200
committerKarel Zak2018-12-07 12:32:57 +0100
commit291606faf999560738e4c47abc79084045181933 (patch)
tree7cb07a367407512766ec31a03b448dc4c73b4a4f /misc-utils
parentlsblk: add devtree_get_device_or_new() (diff)
downloadkernel-qcow2-util-linux-291606faf999560738e4c47abc79084045181933.tar.gz
kernel-qcow2-util-linux-291606faf999560738e4c47abc79084045181933.tar.xz
kernel-qcow2-util-linux-291606faf999560738e4c47abc79084045181933.zip
lsblk: process_one_device() refactoring
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils')
-rw-r--r--misc-utils/lsblk.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/misc-utils/lsblk.c b/misc-utils/lsblk.c
index bb16c23c1..e5312701e 100644
--- a/misc-utils/lsblk.c
+++ b/misc-utils/lsblk.c
@@ -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++;
}