From 2cdaf94b55bd862fc01c76f0e8cb39e68d8f89f9 Mon Sep 17 00:00:00 2001 From: Sami Kerola Date: Thu, 13 Apr 2017 18:09:23 +0100 Subject: [PATCH] partx: add --list-types option Use libblkid as the source of truth what partition type names exist, and are supported. Signed-off-by: Sami Kerola --- bash-completion/partx | 4 ++-- disk-utils/partx.8 | 18 ++++-------------- disk-utils/partx.c | 16 +++++++++++++++- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/bash-completion/partx b/bash-completion/partx index 921666274..929000013 100644 --- a/bash-completion/partx +++ b/bash-completion/partx @@ -27,8 +27,7 @@ _partx_module() return 0 ;; '-t'|'--type') - # FIXME: some command should list type libblkid knows. - COMPREPLY=( $(compgen -W "aix bsd dos gpt mac minix PMBR sgi solaris sun ultrix unixware" -- $cur) ) + COMPREPLY=( $(compgen -W "$(partx --list-types)" -- $cur) ) return 0 ;; '-h'|'--help'|'-V'|'--version') @@ -50,6 +49,7 @@ _partx_module() --raw --sector-size --type + --list-types --verbose --help --version diff --git a/disk-utils/partx.8 b/disk-utils/partx.8 index 2dd34f209..af7313cb9 100644 --- a/disk-utils/partx.8 +++ b/disk-utils/partx.8 @@ -119,20 +119,10 @@ The output columns can be selected and rearranged with the All numbers (except SIZE) are in 512-byte sectors. .TP .BR \-t , " \-\-type " \fItype -Specify the partition table type, which can be one of -.BR aix , -.BR bsd , -.BR dos , -.BR gpt , -.BR mac , -.BR minix , -.BR PMBR , -.BR sgi , -.BR solaris , -.BR sun , -.BR ultrix , -or -.BR unixware . +Specify the partition table type. +.TP +.BR \-\-list\-types +List supported partition types and exit. .TP .BR \-u , " \-\-update" Update the specified partitions. diff --git a/disk-utils/partx.c b/disk-utils/partx.c index a0e337b78..cc00b24bc 100644 --- a/disk-utils/partx.c +++ b/disk-utils/partx.c @@ -767,7 +767,8 @@ static void __attribute__((__noreturn__)) usage(FILE *out) fputs(_(" -P, --pairs use key=\"value\" output format\n"), out); fputs(_(" -r, --raw use raw output format\n"), out); fputs(_(" -S, --sector-size overwrite sector size\n"), out); - fputs(_(" -t, --type specify the partition type (dos, bsd, solaris, etc.)\n"), out); + fputs(_(" -t, --type specify the partition type\n"), out); + fputs(_(" --list-types list supported partition types and exit\n"), out); fputs(_(" -v, --verbose verbose mode\n"), out); fputs(USAGE_SEPARATOR, out); @@ -795,6 +796,9 @@ int main(int argc, char **argv) dev_t disk_devno = 0, part_devno = 0; unsigned int sector_size = 0; + enum { + OPT_LIST_TYPES = CHAR_MAX + 1 + }; static const struct option long_opts[] = { { "bytes", no_argument, NULL, 'b' }, { "noheadings", no_argument, NULL, 'g' }, @@ -805,6 +809,7 @@ int main(int argc, char **argv) { "delete", no_argument, NULL, 'd' }, { "update", no_argument, NULL, 'u' }, { "type", required_argument, NULL, 't' }, + { "list-types", no_argument, NULL, OPT_LIST_TYPES }, { "nr", required_argument, NULL, 'n' }, { "output", required_argument, NULL, 'o' }, { "pairs", no_argument, NULL, 'P' }, @@ -877,6 +882,15 @@ int main(int argc, char **argv) case 'v': verbose = 1; break; + case OPT_LIST_TYPES: + { + size_t idx = 0; + const char *name = NULL; + + while (blkid_partitions_get_name(idx++, &name) == 0) + puts(name); + return EXIT_SUCCESS; + } case 'h': usage(stdout); case 'V':