Newer
Older
vvd / src / fs / gpt.c
@dd86k dd86k on 2 Jun 2021 12 KB Structural crap
#include <stdint.h>
#include <stddef.h>
#include "fs/gpt.h"	// includes uid.h
#include "utils/hash.h"

struct gpt_i_entry_t {
	uint32_t hash;	// See hash.c for current implementation
	const char *value;	// GUID string value
	const char *name;	// Partition type name
};

// https://en.wikipedia.org/wiki/GUID_Partition_Table#Partition_type_GUIDs
const struct gpt_i_entry_t gpt_i_types[] = {
	{ 0x8E022B3A, "00000000-0000-0000-0000-000000000000", "Empty" },
	{ 0x0514B937, "024DEE41-33E7-11D3-9D69-0008C781F39F", "MBR Partition Scheme" },
	{ 0xACCE99DD, "C12A7328-F81F-11D2-BA4B-00A0C93EC93B", "EFI System Partition" },
	{ 0xC7E0162E, "21686148-6449-6E6F-744E-656564454649", "BIOS Boot Partition" },
	{ 0xC72C7A70, "D3BFE2DE-3DAF-11DF-BA40-E3A556D89593", "Intel Fast Flash" },
	{ 0x10AC1CDD, "F4019732-066E-4E12-8273-346C5641494F", "Sony Boot Partition" },
	{ 0xF752E0C7, "BFBFAFE7-A34F-448A-9A5B-6213EB736C22", "Lenovo Boot Partition" },
	// Windows
	{ 0x269ADB66, "E3C9E316-0B5C-4DB8-817D-F92DF00215AE", "Microsoft Reserved Partition" },
	{ 0x5E16CC4F, "EBD0A0A2-B9E5-4433-87C0-68B6B72699C7", "Windows Basic data partition" },
	{ 0x41C253B7, "5808C8AA-7E8F-42E0-85D2-E1E90434CFB3", "Windows Logical Disk Manager metadata partition" },
	{ 0x0E6EE3DF, "AF9B60A0-1431-4F62-BC68-3311714A69AD", "Windows Logical Disk Manager data partition" },
	{ 0x067AF665, "DE94BBA4-06D1-4D40-A16A-BFD50179D6AC", "Windows Recovery Environment" },
	{ 0x43D5E6B4, "37AFFC90-EF7D-4E96-91C3-2D7AE055B174", "IBM General Parallel File System partition" },
	{ 0x14246E2B, "E75CAF8F-F680-4CEE-AFA3-B001E56EFC2D", "Windows Storage Spaces partition" },
	{ 0x78218E65, "558D43C5-A1AC-43C0-AAC8-D1472B2923D1", "Windows Storage Replica partition" },
	// HP-UX
	{ 0xADF08B11, "75894C1E-3AEB-11D3-B7C1-7B03A0000000", "HP-UX Data partition" },
	{ 0x46C5DCAA, "E2A1E728-32E3-11D6-A682-7B03A0000000", "HP-UX Service partition" },
	// Linux
	{ 0x484E9B70, "0FC63DAF-8483-4772-8E79-3D69D8477DE4", "Linux filesystem data" },
	{ 0x1C0E699B, "A19D880F-05FC-4D3B-A006-743F0F84911E", "Linux RAID partition" },
	{ 0xDABC39F1, "44479540-F297-41B2-9AF7-D131D5F0458A", "Linux Root partition (x86)" },
	{ 0xED1FD152, "4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709", "Linux Root partition (x86-64)" },
	{ 0x4CE50D2E, "69DAD710-2CE4-4E3C-B16C-21A1D49ABED3", "Linux Root partition (32-bit ARM)" },
	{ 0xB3C56AFD, "B921B045-1DF0-41C3-AF44-4C6F280D3FAE", "Linux Root partition (64-bit ARM/AArch64)" },
	{ 0xAA5B0BB4, "BC13C2FF-59E6-4262-A352-B275FD6F7172", "Linux Boot partition" },
	{ 0x1B3093AB, "0657FD6D-A4AB-43C4-84E5-0933C84B4F4F", "Linux Swap partition" },
	{ 0x4CCA9687, "E6D6D379-F507-44C2-A23C-238F2A3DF928", "Linux Logical Volume Manager partition" },
	{ 0xD1EA3E64, "933AC7E1-2EB4-4F13-B844-0E14E2AEF915", "Linux Home Partition" },
	{ 0x05FAA95A, "3B8F8425-20E0-4F3B-907F-1A25A76F98E8", "Linux Server Data (/srv) Partition" },
	{ 0x658D616D, "7FFEC5C9-2D00-49B7-8941-3EA10A5586B7", "Linux Plain dm-crypt partition" },
	{ 0x235DB26A, "CA7D7CCB-63ED-4C53-861C-1742536059CC", "Linux Unified Key Setup partition" },
	{ 0x81C15265, "8DA63339-0007-60C0-C436-083AC8230908", "Linux Reserved" },
	// FreeBSD
	{ 0x4BB3F4C4, "83BD6B9D-7F41-11DC-BE0B-001560B84F0F", "FreeBSD Boot Partition" },
	{ 0x40D76637, "516E7CB4-6ECF-11D6-8FF8-00022D09712B", "FreeBSD Data Partition" },
	{ 0x601A83A7, "516E7CB5-6ECF-11D6-8FF8-00022D09712B", "FreebSD Swap Partition" },
	{ 0xA2AB033D, "516E7CB6-6ECF-11D6-8FF8-00022D09712B", "FreeBSD Unix File System Partition" },
	{ 0x56D5FEF5, "516E7CB8-6ECF-11D6-8FF8-00022D09712B", "FreeBSD Vinum Volume Manager Partition " },
	{ 0x907CCD98, "516E7CBA-6ECF-11D6-8FF8-00022D09712B", "FreeBSD ZFS Partition" },
	// macOS
	{ 0x470B460A, "48465300-0000-11AA-AA11-00306543ECAC", "Hierarchical File System Plus (HFS+) partition" },
	{ 0x5FCA3FBC, "7C3457EF-0000-11AA-AA11-00306543ECAC", "Apple APFS or FileVault volume container" },
	{ 0x1429FF52, "55465300-0000-11AA-AA11-00306543ECAC", "Apple UFS container" },
	{ 0x0001C10D, "6A898CC3-1DD2-11B2-99A6-080020736631", "Apple ZFS" },
	{ 0xDC5F557C, "52414944-0000-11AA-AA11-00306543ECAC", "Apple RAID partition" },
	{ 0x962D949D, "52414944-5F4F-11AA-AA11-00306543ECAC", "Apple RAID partition, offline" },
	{ 0xD786CE98, "426F6F74-0000-11AA-AA11-00306543ECAC", "Apple Boot partition (Recovery HD)" },
	{ 0x95841C2E, "4C616265-6C00-11AA-AA11-00306543ECAC", "Apple Label" },
	{ 0xD9360BFE, "5265636F-7665-11AA-AA11-00306543ECAC", "Apple TV Recovery partition" },
	{ 0xE232C3B3, "53746F72-6167-11AA-AA11-00306543ECAC", "Apple HFS+ FileVault volume container" },
	{ 0x39238B68, "B6FA30DA-92D2-4A9A-96F1-871EC6486200", "Apple SoftRAID_Status partition" },
	{ 0xCF12298F, "2E313465-19B9-463F-8126-8A7993773801", "Apple SoftRAID_Scratch partition" },
	{ 0xF3228EEE, "FA709C7E-65B1-4593-BFD5-E71D61DE9B02", "Apple SoftRAID_Volume partition" },
	{ 0xA211B25C, "BBBA6DF5-F46F-4A89-8F59-8765B2727503", "Apple SoftRAID_Cache partition " },
	// Solaris
	{ 0x58A8CC47, "6A82CB45-1DD2-11B2-99A6-080020736631", "Solaris Boot Partition" },
	{ 0x99F24576, "6A85CF4D-1DD2-11B2-99A6-080020736631", "Solaris Root Partition" },
	{ 0xC47C9EA5, "6A87C46F-1DD2-11B2-99A6-080020736631", "Solaris Swap Partition" },
	{ 0xB764C015, "6A8B642B-1DD2-11B2-99A6-080020736631", "Solaris Backup Partition" },
	{ 0x0001C10D, "6A898CC3-1DD2-11B2-99A6-080020736631", "Solaris User (/usr) Partition" },
	{ 0xEE129404, "6A8EF2E9-1DD2-11B2-99A6-080020736631", "Solaris /var Partition" },
	{ 0xBA86FAD9, "6A90BA39-1DD2-11B2-99A6-080020736631", "Solaris Home (/home) Partition" },
	{ 0xB1EFAAC0, "6A9283A5-1DD2-11B2-99A6-080020736631", "Solaris Alternate Sector" },
	{ 0x08647456, "6A945A3B-1DD2-11B2-99A6-080020736631", "Solaris Reserved" },
	{ 0x3CE40B9B, "6A9630D1-1DD2-11B2-99A6-080020736631", "Solaris Reserved" },
	{ 0x21103731, "6A980767-1DD2-11B2-99A6-080020736631", "Solaris Reserved" },
	{ 0xCB448C01, "6A96237F-1DD2-11B2-99A6-080020736631", "Solaris Reserved" },
	{ 0xF8F6FF5C, "6A8D2AC7-1DD2-11B2-99A6-080020736631", "Solaris Reserved" },
	// NetBSD
	{ 0x606E6C4E, "49F48D32-B10E-11DC-B99B-0019D1879648", "NetBSD Swap Partition" },
	{ 0x3F0F4034, "49F48D5A-B10E-11DC-B99B-0019D1879648", "NetBSD FFS Partition" },
	{ 0x3486D322, "49F48D82-B10E-11DC-B99B-0019D1879648", "NetBSD LFS Partition" },
	{ 0x25718784, "49F48DAA-B10E-11DC-B99B-0019D1879648", "NetBSD RAID Partition" },
	{ 0xC53767E8, "2DB519C4-B10F-11DC-B99B-0019D1879648", "NetBSD Concatended Partition" },
	{ 0xC6539646, "2DB519EC-B10F-11DC-B99B-0019D1879648", "NetBSD Encrypted Partition" },
	// ChromeOS
	{ 0xEE26115E, "FE3A2A5D-4F32-41A7-B725-ACCC3285A309", "ChromeOS kernel" },
	{ 0x50868D21, "3CB8E202-3B7E-47DD-8A3C-7FF2A13CFCEC", "ChromeOS rootfs" },
	{ 0xDA299AC0, "2E0A753D-9E48-43B0-8337-B15192CB1B5E", "ChromeOS reserved" },
	// CoreOS
	{ 0xB791D051, "5DFBF5F4-2848-4BAC-AA5E-0D9A20B745A6", "CoreOS /usr Partition" },
	{ 0x13F8C760, "3884DD41-8582-4404-B9A8-E9B84F2DF50E", "CoreOS Resizable rooffs Partition" },
	{ 0xE94125B6, "C95DC21A-DF0E-4340-8D7B-26CBFA9A03E0", "CoreOS OEM Customized Partition" },
	{ 0xB7AC5EE7, "BE9067B9-EA49-4F15-B4F6-F36F8C9E1818", "CoreOS RAID rootfs Partition" },
	// Haiku
	{ 0x66BC7C15, "42465331-3BA3-10F1-802A-4861696B7521", "Haiku BFS" },
	// MidnightBSD
	{ 0x75A67933, "85D5E45E-237C-11E1-B4B3-E89A8F7FC3A7", "MidnightBSD Boot Partition" },
	{ 0xE80FF09F, "85D5E45A-237C-11E1-B4B3-E89A8F7FC3A7", "MidnightBSD Data Partition" },
	{ 0x4A731390, "85D5E45B-237C-11E1-B4B3-E89A8F7FC3A7", "MidnightBSD Swap Partition" },
	{ 0xEB0DD6B8, "0394EF8B-237E-11E1-B4B3-E89A8F7FC3A7", "MidnightBSD UFS Partition" },
	{ 0xF29693F7, "85D5E45C-237C-11E1-B4B3-E89A8F7FC3A7", "MidnightBSD Vinum Volume Manager Partition" },
	{ 0x139BE2B5, "85D5E45D-237C-11E1-B4B3-E89A8F7FC3A7", "MidnightBSD ZFS Partition" },
	// Ceph
	{ 0xEDCE712A, "45B0969E-9B03-4F30-B4C6-B4B80CEFF106", "Ceph Journal" },
	{ 0x14A24331, "45B0969E-9B03-4F30-B4C6-5EC00CEFF106", "Ceph dm-crypt Journal" },
	{ 0x992ABA9B, "4FBD7E29-9D25-41B8-AFD0-062C0CEFF05D", "Ceph OSD" },
	{ 0x4D709BC7, "4FBD7E29-9D25-41B8-AFD0-5EC00CEFF05D", "Ceph dm-crypt OSD" },
	{ 0xE3E1A7CE, "89C57F98-2FE5-4DC0-89C1-F3AD0CEFF2BE", "Ceph Disk in creation" },
	{ 0xD1E11E1B, "89C57F98-2FE5-4DC0-89C1-5EC00CEFF2BE", "Ceph dm-crypt Disk in creation" },
	{ 0xEBF0EFE4, "CAFECAFE-9B03-4F30-B4C6-B4B80CEFF106", "Ceph Block" },
	{ 0xA8AC9BB2, "30CD0809-C2B2-499C-8879-2D6B78529876", "Ceph Block DB" },
	{ 0x105D4F20, "5CE17FCE-4087-4169-B7FF-056CC58473F9", "Ceph Block write-ahead log" },
	{ 0x019E802F, "FB3AABF9-D25F-47CC-BF5E-721D1816496B", "Ceph Lockbox for dm-crypt keys" },
	{ 0xBA15CFAE, "4FBD7E29-8AE0-4982-BF9D-5A8D867AF560", "Ceph Multipath OSD" },
	{ 0x0C84891F, "45B0969E-8AE0-4982-BF9D-5A8D867AF560", "Ceph Multipath Journal" },
	{ 0xA36A1973, "CAFECAFE-8AE0-4982-BF9D-5A8D867AF560", "Ceph Multipath Block" },
	{ 0x6FA76A64, "7F4A666A-16F3-47A2-8445-152EF4D03F6C", "Ceph Multipath Block" },
	{ 0x07949EE4, "EC6D6385-E346-45DC-BE91-DA2A7C8B3261", "Ceph Multipath Block DB" },
	{ 0xA2CF5925, "01B41E1B-002A-453C-9F17-88793989FF8F", "Ceph Multipath Block write-ahead log" },
	{ 0x74A943D6, "CAFECAFE-9B03-4F30-B4C6-5EC00CEFF106", "Ceph dm-crypt Block" },
	{ 0x5C6D0C5B, "93B0052D-02D9-4D8A-A43B-33A3EE4DFBC3", "Ceph dm-crypt Block DB" },
	{ 0x276146A6, "306E8683-4FE2-4330-B7C0-00A917C16966", "Ceph dm-crypt Block write-ahead log" },
	{ 0xA8D72DB9, "45B0969E-9B03-4F30-B4C6-35865CEFF106", "Ceph dm-crypt LUKS Journal" },
	{ 0x63F9352A, "CAFECAFE-9B03-4F30-B4C6-35865CEFF106", "Ceph dm-crypt LUKS Block" },
	{ 0xF8A5CD43, "166418DA-C469-4022-ADF4-B30AFD37F176", "Ceph dm-crypt LUKS Block DB" },
	{ 0x0F0F3645, "86A32090-3647-40B9-BBBD-38D8C573AA86", "Ceph dm-crypt LUKS Block write-ahead log" },
	{ 0xA5CED512, "4FBD7E29-9D25-41B8-AFD0-35865CEFF05D", "Ceph dm-crypt LUKS OSD" },
	// OpenBSD
	{ 0xF6E74095, "824CC7A0-36A8-11E3-890A-952519AD3F61", "OpenBSD Data Partition" },
	// QNX
	{ 0xDB34F656, "CEF5A9AD-73BC-4601-89F3-CDEEEEE321A1", "QNX6 Power-safe FS" },
	// Plan9
	{ 0xB6B6A42F, "C91818F9-8025-47AF-89D2-F030D7000C2C", "Plan9 Partition" },
	// VMware ESX
	{ 0x31E75E8A, "9D275380-40AD-11DB-BF97-000C2911D1B8", "VMware ESX vmkcore Partition" },
	{ 0x4186E797, "AA31E02A-400F-11DB-9590-000C2911D1B8", "VMware ESX VMFS Partition" },
	{ 0x34FB36D1, "9198EFFC-31C0-11DB-8F78-000C2911D1B8", "VMware ESX Reserved" },
	// Android-x86
	{ 0x83A9422A, "2568845D-2332-4675-BC39-8FA5A4748D15", "Android-x86 Bootloader" },
	{ 0x72A01C37, "114EAFFE-1552-4022-B26E-9B053604CF84", "Android-x86 Bootloader2" },
	{ 0xB1905CF7, "49A4D17F-93A3-45C1-A0DE-F50B2EBE2599", "Android-x86 Boot" },
	{ 0x3B969C16, "4177C722-9E92-4AAB-8644-43502BFD5506", "Android-x86 Recovery" },
	{ 0xC2B69556, "EF32A33B-A409-486C-9141-9FFB711F6266", "Android-x86 Misc" },
	{ 0xD34FF551, "20AC26BE-20B7-11E3-84C5-6CFDB94711E9", "Android-x86 Metadata" },
	{ 0x7923A6EA, "38F428E6-D326-425D-9140-6E0EA133647C", "Android-x86 System" },
	{ 0x427737E7, "A893EF21-E428-470A-9E55-0668FD91A2D9", "Android-x86 Cache" },
	{ 0x37237ADB, "DC76DDA9-5AC1-491C-AF42-A82591580C0D", "Android-x86 Data" },
	{ 0x810B4A92, "EBC597D0-2053-4B15-8B64-E0AAC75F4DB1", "Android-x86 Persistent" },
	{ 0xF14F045A, "C5A0AEEC-13EA-11E5-A1B1-001E67CA0C3C", "Android-x86 Vendor" },
	{ 0x9D0020AD, "BD59408B-4514-490D-BF12-9878D963F378", "Android-x86 Config" },
	{ 0x57EC611F, "8F68CC74-C5E5-48DA-BE91-A0C8C15E9C80", "Android-x86 Factory" },
	{ 0x1B09DB30, "9FDAA6EF-4B3F-40D2-BA8D-BFF16BFB887B", "Android-x86 Factory (alt)" },
	{ 0x19B8B344, "767941D0-2085-11E3-AD3B-6CFDB94711E9", "Android-x86 Fastboot/Tertiary" },
	{ 0xCE907A9F, "AC6D7924-EB71-4DF8-B48D-E267B27148FF", "Android-x86 OEM" },
	// Android
	{ 0x3066CD72, "19A710A2-B3CA-11E4-B026-10604B889DCF", "Android Meta" },
	{ 0x41AA0D1B, "193D1EA4-B3CA-11E4-B075-10604B889DCF", "Android EXT" },
	// ONIE
	{ 0x85F1605D, "7412F7D5-A156-4B13-81DC-867174929325", "ONIE Boot" },
	{ 0xE1D5C3A2, "D4E6E2CD-4469-46F3-B5CB-1BFF57AFC149", "ONIE Config" },
	// PowerPC
	{ 0x57D8C5E7, "9E1A2D38-C612-4316-AA26-8B49521E5A8B", "PowerPC PReP Boot" },
	// freedesktop.org
	{ 0xAA5B0BB4, "BC13C2FF-59E6-4262-A352-B275FD6F7172", "freedesktop.org Shared Boot Loader Configuration" },
	// Atari TOS
	{ 0x67AA0DD3, "734E5AFE-F61A-11E6-BC64-92361F002671", "Atari TOS Basic Data Partition" },
	// VeraCrypt
	{ 0xAD1F50BC, "8C8F8EFF-AC95-4770-814A-21994F2DBC8F", "VeraCrypt Encrypted Data Partition" },
	// Empty marker
	{ 0, NULL, NULL }
};

const char* gpt_part_type_str(UID *uid) {
	uint32_t hash = hash_compute((char*)uid, 16);

	const struct gpt_i_entry_t *entry = (struct gpt_i_entry_t*)gpt_i_types;
	while (entry->hash) {
		if (hash == entry->hash)
			return entry->name;
		++entry;
	}

	return NULL;
}