summaryrefslogtreecommitdiffstats
path: root/disk-utils/sfdisk.c
diff options
context:
space:
mode:
authorKarel Zak2015-07-28 15:54:07 +0200
committerKarel Zak2015-07-28 15:54:07 +0200
commit8abdb91211895355b4f8ae9422f03927cacf5ef9 (patch)
treeb326952cc93e7489fe71a9ad398808bb5ff7d833 /disk-utils/sfdisk.c
parentfdisk: add 'F' command to list free unpartitioned space (diff)
downloadkernel-qcow2-util-linux-8abdb91211895355b4f8ae9422f03927cacf5ef9.tar.gz
kernel-qcow2-util-linux-8abdb91211895355b4f8ae9422f03927cacf5ef9.tar.xz
kernel-qcow2-util-linux-8abdb91211895355b4f8ae9422f03927cacf5ef9.zip
sfdisk: add --list-free
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'disk-utils/sfdisk.c')
-rw-r--r--disk-utils/sfdisk.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/disk-utils/sfdisk.c b/disk-utils/sfdisk.c
index e1d5e5acf..d3b9baa30 100644
--- a/disk-utils/sfdisk.c
+++ b/disk-utils/sfdisk.c
@@ -71,6 +71,7 @@ enum {
ACT_CHANGE_ID,
ACT_DUMP,
ACT_LIST,
+ ACT_LIST_FREE,
ACT_LIST_TYPES,
ACT_SHOW_SIZE,
ACT_SHOW_GEOM,
@@ -361,6 +362,28 @@ static int command_list_partitions(struct sfdisk *sf, int argc, char **argv)
}
/*
+ * sfdisk --list-free [<device ..]
+ */
+static int command_list_freespace(struct sfdisk *sf, int argc, char **argv)
+{
+ fdisk_enable_listonly(sf->cxt, 1);
+
+ if (argc) {
+ int i, ct = 0;
+
+ for (i = 0; i < argc; i++) {
+ if (ct)
+ fputs("\n\n", stdout);
+ if (print_device_freespace(sf->cxt, argv[i], 0) == 0)
+ ct++;
+ }
+ } else
+ print_all_devices_freespace(sf->cxt);
+
+ return 0;
+}
+
+/*
* sfdisk --list-types
*/
static int command_list_types(struct sfdisk *sf)
@@ -1413,6 +1436,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out)
fputs(_(" -J, --json <dev> dump partition table in JSON format\n"), out);
fputs(_(" -g, --show-geometry [<dev> ...] list geometry of all or specified devices\n"), out);
fputs(_(" -l, --list [<dev> ...] list partitions of each device\n"), out);
+ fputs(_(" -F, --list-free [<dev> ...] list unpartitions free areas of each device\n"), out);
fputs(_(" -s, --show-size [<dev> ...] list sizes of all or specified devices\n"), out);
fputs(_(" -T, --list-types print the recognized types (see -X)\n"), out);
fputs(_(" -V, --verify [<dev> ...] test whether partitions seem correct\n"), out);
@@ -1496,6 +1520,7 @@ int main(int argc, char *argv[])
{ "label", required_argument, NULL, 'X' },
{ "label-nested", required_argument, NULL, 'Y' },
{ "list", no_argument, NULL, 'l' },
+ { "list-free", no_argument, NULL, 'F' },
{ "list-types", no_argument, NULL, 'T' },
{ "no-act", no_argument, NULL, 'n' },
{ "no-reread", no_argument, NULL, OPT_NOREREAD },
@@ -1527,7 +1552,7 @@ int main(int argc, char *argv[])
textdomain(PACKAGE);
atexit(close_stdout);
- while ((c = getopt_long(argc, argv, "aAbcdfghJlLo:O:nN:qsTu:vVX:Y:",
+ while ((c = getopt_long(argc, argv, "aAbcdfFghJlLo:O:nN:qsTu:vVX:Y:",
longopts, &longidx)) != -1) {
switch(c) {
case 'A':
@@ -1556,6 +1581,9 @@ int main(int argc, char *argv[])
case 'd':
sf->act = ACT_DUMP;
break;
+ case 'F':
+ sf->act = ACT_LIST_FREE;
+ break;
case 'f':
sf->force = 1;
break;
@@ -1667,6 +1695,10 @@ int main(int argc, char *argv[])
rc = command_list_types(sf);
break;
+ case ACT_LIST_FREE:
+ rc = command_list_freespace(sf, argc - optind, argv + optind);
+ break;
+
case ACT_FDISK:
rc = command_fdisk(sf, argc - optind, argv + optind);
break;