From 8abdb91211895355b4f8ae9422f03927cacf5ef9 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 28 Jul 2015 15:54:07 +0200 Subject: sfdisk: add --list-free Signed-off-by: Karel Zak --- disk-utils/sfdisk.c | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'disk-utils/sfdisk.c') 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, @@ -360,6 +361,28 @@ static int command_list_partitions(struct sfdisk *sf, int argc, char **argv) return 0; } +/* + * sfdisk --list-free [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 */ @@ -1413,6 +1436,7 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) fputs(_(" -J, --json dump partition table in JSON format\n"), out); fputs(_(" -g, --show-geometry [ ...] list geometry of all or specified devices\n"), out); fputs(_(" -l, --list [ ...] list partitions of each device\n"), out); + fputs(_(" -F, --list-free [ ...] list unpartitions free areas of each device\n"), out); fputs(_(" -s, --show-size [ ...] list sizes of all or specified devices\n"), out); fputs(_(" -T, --list-types print the recognized types (see -X)\n"), out); fputs(_(" -V, --verify [ ...] 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; -- cgit v1.2.3-55-g7522