From 5353ba3f0d4cd40e6ede294258ae1a7716fd42a1 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 23 Feb 2021 09:19:51 +0100 Subject: [PATCH] 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 --- libfdisk/src/libfdisk.h.in | 3 +++ libfdisk/src/parttype.c | 21 +++++++++++++++++++++ libfdisk/src/script.c | 1 + 3 files changed, 25 insertions(+) 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 -- 2.47.3