1cf200d32Sopenharmony_ci/* This program is copyright (c) 2009-2018 by Roderick W. Smith. It is distributed 2cf200d32Sopenharmony_ci under the terms of the GNU GPL version 2, as detailed in the COPYING file. */ 3cf200d32Sopenharmony_ci 4cf200d32Sopenharmony_ci#ifndef __PARTITION_TYPES 5cf200d32Sopenharmony_ci#define __PARTITION_TYPES 6cf200d32Sopenharmony_ci 7cf200d32Sopenharmony_ci#include <stdint.h> 8cf200d32Sopenharmony_ci#include <stdlib.h> 9cf200d32Sopenharmony_ci#include <string> 10cf200d32Sopenharmony_ci#include "support.h" 11cf200d32Sopenharmony_ci#include "guid.h" 12cf200d32Sopenharmony_ci#ifdef USE_UTF16 13cf200d32Sopenharmony_ci#include <unicode/ustream.h> 14cf200d32Sopenharmony_ci#else 15cf200d32Sopenharmony_ci#define UnicodeString std::string 16cf200d32Sopenharmony_ci#endif 17cf200d32Sopenharmony_ci 18cf200d32Sopenharmony_ci// A partition type 19cf200d32Sopenharmony_cistruct AType { 20cf200d32Sopenharmony_ci // I'm using a custom 16-bit extension of the original MBR 8-bit 21cf200d32Sopenharmony_ci // type codes, so as to permit disambiguation and use of new 22cf200d32Sopenharmony_ci // codes required by GPT 23cf200d32Sopenharmony_ci uint16_t MBRType; 24cf200d32Sopenharmony_ci GUIDData GUIDType; 25cf200d32Sopenharmony_ci std::string name; 26cf200d32Sopenharmony_ci int display; // 1 to show to users as available type, 0 not to 27cf200d32Sopenharmony_ci AType* next; 28cf200d32Sopenharmony_ci}; // struct AType 29cf200d32Sopenharmony_ci 30cf200d32Sopenharmony_ciclass PartType : public GUIDData { 31cf200d32Sopenharmony_ciprotected: 32cf200d32Sopenharmony_ci static int numInstances; 33cf200d32Sopenharmony_ci static AType* allTypes; // Linked list holding all the data 34cf200d32Sopenharmony_ci static AType* lastType; // Pointer to last entry in the list 35cf200d32Sopenharmony_ci void AddAllTypes(void); 36cf200d32Sopenharmony_cipublic: 37cf200d32Sopenharmony_ci // PartType with GUID "00000000-0000-0000-0000-000000000000" 38cf200d32Sopenharmony_ci static const PartType unusedPartType; 39cf200d32Sopenharmony_ci 40cf200d32Sopenharmony_ci PartType(void); 41cf200d32Sopenharmony_ci PartType(const PartType & orig); 42cf200d32Sopenharmony_ci PartType(const GUIDData & orig); 43cf200d32Sopenharmony_ci ~PartType(void); 44cf200d32Sopenharmony_ci 45cf200d32Sopenharmony_ci // Set up type information 46cf200d32Sopenharmony_ci int AddType(uint16_t mbrType, const char * guidData, const char * name, int toDisplay = 1); 47cf200d32Sopenharmony_ci 48cf200d32Sopenharmony_ci // New assignment operators.... 49cf200d32Sopenharmony_ci PartType & operator=(const std::string & orig); 50cf200d32Sopenharmony_ci PartType & operator=(const char * orig); 51cf200d32Sopenharmony_ci 52cf200d32Sopenharmony_ci // Assignment operators based on base class.... 53cf200d32Sopenharmony_ci GUIDData & operator=(const GUIDData & orig) {return GUIDData::operator=(orig);} 54cf200d32Sopenharmony_ci 55cf200d32Sopenharmony_ci // New data assignment 56cf200d32Sopenharmony_ci PartType & operator=(uint16_t ID); // Use MBR type code times 0x0100 to assign GUID 57cf200d32Sopenharmony_ci 58cf200d32Sopenharmony_ci // Retrieve transformed GUID data based on type code matches 59cf200d32Sopenharmony_ci std::string TypeName(void) const; 60cf200d32Sopenharmony_ci UnicodeString UTypeName(void) const; 61cf200d32Sopenharmony_ci uint16_t GetHexType() const; 62cf200d32Sopenharmony_ci 63cf200d32Sopenharmony_ci // Information relating to all type data 64cf200d32Sopenharmony_ci void ShowAllTypes(int maxLines = 21) const; 65cf200d32Sopenharmony_ci int Valid(uint16_t code) const; 66cf200d32Sopenharmony_ci}; 67cf200d32Sopenharmony_ci 68cf200d32Sopenharmony_ci#endif 69