]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: support partition type name parsing
authorKarel Zak <kzak@redhat.com>
Tue, 23 Feb 2021 08:19:51 +0000 (09:19 +0100)
committerKarel Zak <kzak@redhat.com>
Tue, 23 Feb 2021 08:19:51 +0000 (09:19 +0100)
Add to fdisk_label_advparse_parttype() support for
FDISK_PARTTYPE_PARSE_NAME to parse partition type name.

Signed-off-by: Karel Zak <kzak@redhat.com>
libfdisk/src/libfdisk.h.in
libfdisk/src/parttype.c
libfdisk/src/script.c

index 3746619825be4165f5b77baa1b0feb71e96de371..6f2e77d047536bdceeeb70d53c4c690ad6a1e409 100644 (file)
@@ -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 )
 };
 
index 72c5e3613e90950b2d751d6ac6c5c8d24f369009..3a5db9c2886f837729fd352c55e910b5f6f9b407 100644 (file)
@@ -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,
index c3d8eb547b4e64095c0fe86f362ce64415d0479e..19ad9f0b3dc66c7f0e97773c50627e859a6cf6ed 100644 (file)
@@ -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