* @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),
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 )
};
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
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,
#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