|
@@ -80,10 +80,65 @@ int uuid_str_valid(const char *uuid)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_PARTITION_TYPE_GUID
|
|
|
+static const struct {
|
|
|
+ const char *string;
|
|
|
+ efi_guid_t guid;
|
|
|
+} list_guid[] = {
|
|
|
+ {"system", PARTITION_SYSTEM_GUID},
|
|
|
+ {"mbr", LEGACY_MBR_PARTITION_GUID},
|
|
|
+ {"msft", PARTITION_MSFT_RESERVED_GUID},
|
|
|
+ {"data", PARTITION_BASIC_DATA_GUID},
|
|
|
+ {"linux", PARTITION_LINUX_FILE_SYSTEM_DATA_GUID},
|
|
|
+ {"raid", PARTITION_LINUX_RAID_GUID},
|
|
|
+ {"swap", PARTITION_LINUX_SWAP_GUID},
|
|
|
+ {"lvm", PARTITION_LINUX_LVM_GUID}
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * uuid_guid_get_bin() - this function get GUID bin for string
|
|
|
+ *
|
|
|
+ * @param guid_str - pointer to partition type string
|
|
|
+ * @param guid_bin - pointer to allocated array for big endian output [16B]
|
|
|
+ */
|
|
|
+int uuid_guid_get_bin(const char *guid_str, unsigned char *guid_bin)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ for (i = 0; i < ARRAY_SIZE(list_guid); i++) {
|
|
|
+ if (!strcmp(list_guid[i].string, guid_str)) {
|
|
|
+ memcpy(guid_bin, &list_guid[i].guid, 16);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return -ENODEV;
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * uuid_guid_get_str() - this function get string for GUID.
|
|
|
+ *
|
|
|
+ * @param guid_bin - pointer to string with partition type guid [16B]
|
|
|
+ * @param guid_str - pointer to allocated partition type string [7B]
|
|
|
+ */
|
|
|
+int uuid_guid_get_str(unsigned char *guid_bin, char *guid_str)
|
|
|
+{
|
|
|
+ int i;
|
|
|
+
|
|
|
+ *guid_str = 0;
|
|
|
+ for (i = 0; i < ARRAY_SIZE(list_guid); i++) {
|
|
|
+ if (!memcmp(list_guid[i].guid.b, guid_bin, 16)) {
|
|
|
+ strcpy(guid_str, list_guid[i].string);
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return -ENODEV;
|
|
|
+}
|
|
|
+#endif
|
|
|
+
|
|
|
/*
|
|
|
* uuid_str_to_bin() - convert string UUID or GUID to big endian binary data.
|
|
|
*
|
|
|
- * @param uuid_str - pointer to UUID or GUID string [37B]
|
|
|
+ * @param uuid_str - pointer to UUID or GUID string [37B] or GUID shorcut
|
|
|
* @param uuid_bin - pointer to allocated array for big endian output [16B]
|
|
|
* @str_format - UUID string format: 0 - UUID; 1 - GUID
|
|
|
*/
|
|
@@ -93,8 +148,13 @@ int uuid_str_to_bin(char *uuid_str, unsigned char *uuid_bin, int str_format)
|
|
|
uint32_t tmp32;
|
|
|
uint64_t tmp64;
|
|
|
|
|
|
- if (!uuid_str_valid(uuid_str))
|
|
|
+ if (!uuid_str_valid(uuid_str)) {
|
|
|
+#ifdef CONFIG_PARTITION_TYPE_GUID
|
|
|
+ if (!uuid_guid_get_bin(uuid_str, uuid_bin))
|
|
|
+ return 0;
|
|
|
+#endif
|
|
|
return -EINVAL;
|
|
|
+ }
|
|
|
|
|
|
if (str_format == UUID_STR_FORMAT_STD) {
|
|
|
tmp32 = cpu_to_be32(simple_strtoul(uuid_str, NULL, 16));
|