From: Karel Zak Date: Tue, 23 Feb 2021 08:19:51 +0000 (+0100) Subject: libfdisk: support partition type name parsing X-Git-Tag: v2.37-rc1~100 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5353ba3f0d4cd40e6ede294258ae1a7716fd42a1;p=thirdparty%2Futil-linux.git libfdisk: support partition type name parsing Add to fdisk_label_advparse_parttype() support for FDISK_PARTTYPE_PARSE_NAME to parse partition type name. Signed-off-by: Karel Zak --- diff --git a/libfdisk/src/libfdisk.h.in b/libfdisk/src/libfdisk.h.in index 3746619825..6f2e77d047 100644 --- a/libfdisk/src/libfdisk.h.in +++ b/libfdisk/src/libfdisk.h.in @@ -298,6 +298,7 @@ struct fdisk_parttype *fdisk_label_advparse_parttype( * @FDISK_PARTTYPE_PARSE_DEFAULT: recommended flags for new code * @FDISK_PARTTYPE_PARSE_NOUNKNOWN: ignore unknown types * @FDISK_PARTTYPE_PARSE_SEQNUM: use input as sequntial number of type (e.g. list-types fdisk dialog) + * @FDISK_PARTTYPE_PARSE_NAME: parse type human readable name */ enum fdisk_parttype_parser_flags { FDISK_PARTTYPE_PARSE_DATA = (1 << 1), @@ -307,10 +308,12 @@ enum fdisk_parttype_parser_flags { FDISK_PARTTYPE_PARSE_DEPRECATED = (1 << 5), FDISK_PARTTYPE_PARSE_NOUNKNOWN = (1 << 6), FDISK_PARTTYPE_PARSE_SEQNUM = (1 << 7), + FDISK_PARTTYPE_PARSE_NAME = (1 << 8), FDISK_PARTTYPE_PARSE_DEFAULT = (FDISK_PARTTYPE_PARSE_DATA | \ FDISK_PARTTYPE_PARSE_SHORTCUT | \ FDISK_PARTTYPE_PARSE_ALIAS | \ + FDISK_PARTTYPE_PARSE_NAME | \ FDISK_PARTTYPE_PARSE_SEQNUM ) }; diff --git a/libfdisk/src/parttype.c b/libfdisk/src/parttype.c index 72c5e3613e..3a5db9c288 100644 --- a/libfdisk/src/parttype.c +++ b/libfdisk/src/parttype.c @@ -413,6 +413,24 @@ static struct fdisk_parttype *parttype_from_alias( return NULL; } +static struct fdisk_parttype *parttype_from_name( + const struct fdisk_label *lb, + const char *str) +{ + size_t i; + + DBG(LABEL, ul_debugobj(lb, " parsing '%s' name", str)); + + for (i = 0; i < lb->nparttypes; i++) { + const char *name = lb->parttypes[i].name; + + if (name && *name && ul_stralnumcmp(name, str) == 0) + return &lb->parttypes[i]; + } + + return NULL; +} + /** * fdisk_label_advparse_parttype: * @lb: label @@ -456,6 +474,9 @@ struct fdisk_parttype *fdisk_label_advparse_parttype( res = parttype_from_shortcut(lb, str, flags & FDISK_PARTTYPE_PARSE_DEPRECATED); + if (!res && (flags & FDISK_PARTTYPE_PARSE_NAME)) + res = parttype_from_name(lb, str); + if (!res && (flags & FDISK_PARTTYPE_PARSE_DATA) && (flags & FDISK_PARTTYPE_PARSE_DATALAST)) res = parttype_from_data(lb, str, &code, diff --git a/libfdisk/src/script.c b/libfdisk/src/script.c index c3d8eb547b..19ad9f0b3d 100644 --- a/libfdisk/src/script.c +++ b/libfdisk/src/script.c @@ -989,6 +989,7 @@ static int partno_from_devname(char *s) #define FDISK_SCRIPT_PARTTYPE_PARSE_FLAGS \ (FDISK_PARTTYPE_PARSE_DATA | FDISK_PARTTYPE_PARSE_DATALAST | \ FDISK_PARTTYPE_PARSE_SHORTCUT | FDISK_PARTTYPE_PARSE_ALIAS | \ + FDISK_PARTTYPE_PARSE_NAME | \ FDISK_PARTTYPE_PARSE_DEPRECATED) /* dump format