]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
partx: add --list-types option
authorSami Kerola <kerolasa@iki.fi>
Thu, 13 Apr 2017 17:09:23 +0000 (18:09 +0100)
committerSami Kerola <kerolasa@iki.fi>
Tue, 2 May 2017 22:22:04 +0000 (23:22 +0100)
Use libblkid as the source of truth what partition type names exist, and are
supported.

Signed-off-by: Sami Kerola <kerolasa@iki.fi>
bash-completion/partx
disk-utils/partx.8
disk-utils/partx.c

index 921666274b9f68088e0cb5a0bf73f210d80929bb..929000013c1f8f409e38cf67aee28a0c9c025c01 100644 (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
index 2dd34f209b23387d6d408ee8ef488c02d975f4c1..af7313cb90cafc553f4360fbcb162654fd467f3a 100644 (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.
index a0e337b78b45739a456d1d10fba90672c9c21aa7..cc00b24bc31f8cb96e7431de9076f376e7b97013 100644 (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':