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 <kerolasa@iki.fi>
This commit is contained in:
Sami Kerola 2017-04-13 18:09:23 +01:00
parent 635d9aa5db
commit 2cdaf94b55
No known key found for this signature in database
GPG Key ID: A9553245FDE9B739
3 changed files with 21 additions and 17 deletions

View File

@ -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

View File

@ -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.

View File

@ -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 <num> overwrite sector size\n"), out);
fputs(_(" -t, --type <type> specify the partition type (dos, bsd, solaris, etc.)\n"), out);
fputs(_(" -t, --type <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':