srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 1 | // |
| 2 | // C++ Interface: gptpart |
| 3 | // |
| 4 | // Description: Class to implement a single GPT partition |
| 5 | // |
| 6 | // |
| 7 | // Author: Rod Smith <rodsmith@rodsbooks.com>, (C) 2009 |
| 8 | // |
| 9 | // Copyright: See COPYING file that comes with this distribution |
| 10 | // |
| 11 | // |
srs5694 | 978041c | 2009-09-21 20:51:47 -0400 | [diff] [blame] | 12 | // This program is copyright (c) 2009 by Roderick W. Smith. It is distributed |
| 13 | // under the terms of the GNU GPL version 2, as detailed in the COPYING file. |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 14 | |
| 15 | #ifndef __GPTPART_H |
| 16 | #define __GPTPART_H |
| 17 | |
| 18 | #include <stdint.h> |
srs5694 | 546a9c7 | 2010-01-26 16:00:26 -0500 | [diff] [blame] | 19 | #include <string> |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 20 | #include <sys/types.h> |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 21 | #include "support.h" |
| 22 | #include "parttypes.h" |
srs5694 | 6699b01 | 2010-02-04 00:55:30 -0500 | [diff] [blame] | 23 | #include "guid.h" |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 24 | |
| 25 | using namespace std; |
| 26 | |
srs5694 | 978041c | 2009-09-21 20:51:47 -0400 | [diff] [blame] | 27 | /**************************************** |
| 28 | * * |
| 29 | * GPTPart class and related structures * |
| 30 | * * |
| 31 | ****************************************/ |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 32 | |
| 33 | class GPTPart { |
| 34 | protected: |
srs5694 | ba00fed | 2010-01-12 18:18:36 -0500 | [diff] [blame] | 35 | // Caution: The non-static data in GPTPart is precisely the right size |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 36 | // to enable easy loading of the data directly from disk. If any |
| 37 | // non-static variables are added to the below, the data size will |
| 38 | // change and the program will stop working. This can be corrected by |
| 39 | // adjusting the data-load operation in GPTData::LoadMainTable() and |
srs5694 | ba00fed | 2010-01-12 18:18:36 -0500 | [diff] [blame] | 40 | // GPTData::LoadSecondTableAsMain() and then removing the GPTPart |
| 41 | // size check in SizesOK() (in gpt.cc file). |
srs5694 | 6699b01 | 2010-02-04 00:55:30 -0500 | [diff] [blame] | 42 | PartType partitionType; |
| 43 | GUIDData uniqueGUID; |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 44 | uint64_t firstLBA; |
| 45 | uint64_t lastLBA; |
| 46 | uint64_t attributes; |
| 47 | unsigned char name[NAME_SIZE]; |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 48 | public: |
| 49 | GPTPart(void); |
| 50 | ~GPTPart(void); |
| 51 | |
| 52 | // Simple data retrieval: |
srs5694 | 6699b01 | 2010-02-04 00:55:30 -0500 | [diff] [blame] | 53 | PartType & GetType(void) {return partitionType;} |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 54 | uint16_t GetHexType(void); |
srs5694 | 6699b01 | 2010-02-04 00:55:30 -0500 | [diff] [blame] | 55 | string GetTypeName(void); |
| 56 | GUIDData GetUniqueGUID(void) {return uniqueGUID;} |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 57 | uint64_t GetFirstLBA(void) {return firstLBA;} |
| 58 | uint64_t GetLastLBA(void) {return lastLBA;} |
| 59 | uint64_t GetLengthLBA(void); |
| 60 | uint64_t GetAttributes(void) {return attributes;} |
srs5694 | 6699b01 | 2010-02-04 00:55:30 -0500 | [diff] [blame] | 61 | string GetDescription(void); |
srs5694 | 08bb0da | 2010-02-19 17:19:55 -0500 | [diff] [blame] | 62 | int IsUsed(void); |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 63 | |
| 64 | // Simple data assignment: |
srs5694 | 6699b01 | 2010-02-04 00:55:30 -0500 | [diff] [blame] | 65 | void SetType(PartType t); |
| 66 | void SetType(uint16_t hex) {partitionType = hex;} |
| 67 | void SetUniqueGUID(GUIDData u) {uniqueGUID = u;} |
| 68 | void RandomizeUniqueGUID(void) {uniqueGUID.Randomize();} |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 69 | void SetFirstLBA(uint64_t f) {firstLBA = f;} |
| 70 | void SetLastLBA(uint64_t l) {lastLBA = l;} |
| 71 | void SetAttributes(uint64_t a) {attributes = a;} |
srs5694 | 0a69731 | 2010-01-28 21:10:52 -0500 | [diff] [blame] | 72 | void SetName(const string & n); |
srs5694 | 6699b01 | 2010-02-04 00:55:30 -0500 | [diff] [blame] | 73 | void SetDefaultDescription(void); |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 74 | |
| 75 | // Additional functions |
| 76 | GPTPart & operator=(const GPTPart & orig); |
srs5694 | 978041c | 2009-09-21 20:51:47 -0400 | [diff] [blame] | 77 | void ShowSummary(int partNum, uint32_t blockSize); // display summary information (1-line) |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 78 | void ShowDetails(uint32_t blockSize); // display detailed information (multi-line) |
| 79 | void BlankPartition(void); // empty partition of data |
srs5694 | 0a69731 | 2010-01-28 21:10:52 -0500 | [diff] [blame] | 80 | int DoTheyOverlap(const GPTPart & other); // returns 1 if there's overlap |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 81 | void ReversePartBytes(void); // reverse byte order of all integer fields |
| 82 | |
| 83 | // Functions requiring user interaction |
| 84 | void ChangeType(void); // Change the type code |
| 85 | }; // struct GPTPart |
| 86 | |
srs5694 | a0eb11a | 2009-08-29 15:00:08 -0400 | [diff] [blame] | 87 | #endif |