xref: /aosp_15_r20/external/gptfdisk/gptpart.h (revision 57696d54d05c64fd1b1787f8371dbcf104911cfb)
1*57696d54SAkhilesh Sanikop //
2*57696d54SAkhilesh Sanikop // C++ Interface: gptpart
3*57696d54SAkhilesh Sanikop //
4*57696d54SAkhilesh Sanikop // Description: Class to implement a single GPT partition
5*57696d54SAkhilesh Sanikop //
6*57696d54SAkhilesh Sanikop //
7*57696d54SAkhilesh Sanikop // Author: Rod Smith <[email protected]>, (C) 2009
8*57696d54SAkhilesh Sanikop //
9*57696d54SAkhilesh Sanikop // Copyright: See COPYING file that comes with this distribution
10*57696d54SAkhilesh Sanikop //
11*57696d54SAkhilesh Sanikop //
12*57696d54SAkhilesh Sanikop // This program is copyright (c) 2009 by Roderick W. Smith. It is distributed
13*57696d54SAkhilesh Sanikop // under the terms of the GNU GPL version 2, as detailed in the COPYING file.
14*57696d54SAkhilesh Sanikop 
15*57696d54SAkhilesh Sanikop #ifndef __GPTPART_H
16*57696d54SAkhilesh Sanikop #define __GPTPART_H
17*57696d54SAkhilesh Sanikop 
18*57696d54SAkhilesh Sanikop #include <stdint.h>
19*57696d54SAkhilesh Sanikop #include <string>
20*57696d54SAkhilesh Sanikop #include <sys/types.h>
21*57696d54SAkhilesh Sanikop #include "support.h"
22*57696d54SAkhilesh Sanikop #include "parttypes.h"
23*57696d54SAkhilesh Sanikop #include "guid.h"
24*57696d54SAkhilesh Sanikop #include "attributes.h"
25*57696d54SAkhilesh Sanikop 
26*57696d54SAkhilesh Sanikop // Values returned by GPTPart::IsSizedForMBR()
27*57696d54SAkhilesh Sanikop #define MBR_SIZED_GOOD 0 /* Whole partition under 2^32 sectors */
28*57696d54SAkhilesh Sanikop #define MBR_SIZED_IFFY 1 /* Partition starts under 2^32 & is less than 2^32, but ends over 2^32 */
29*57696d54SAkhilesh Sanikop #define MBR_SIZED_BAD  2 /* Partition starts over 2^32, is bigger than 2^32, or otherwise bad */
30*57696d54SAkhilesh Sanikop 
31*57696d54SAkhilesh Sanikop /****************************************
32*57696d54SAkhilesh Sanikop  *                                      *
33*57696d54SAkhilesh Sanikop  * GPTPart class and related structures *
34*57696d54SAkhilesh Sanikop  *                                      *
35*57696d54SAkhilesh Sanikop  ****************************************/
36*57696d54SAkhilesh Sanikop 
37*57696d54SAkhilesh Sanikop class GPTPart {
38*57696d54SAkhilesh Sanikop    protected:
39*57696d54SAkhilesh Sanikop       // Caution: The non-static data in GPTPart is precisely the right size
40*57696d54SAkhilesh Sanikop       // to enable easy loading of the data directly from disk. If any
41*57696d54SAkhilesh Sanikop       // non-static variables are added to the below, the data size will
42*57696d54SAkhilesh Sanikop       // change and the program will stop working. This can be corrected by
43*57696d54SAkhilesh Sanikop       // adjusting the data-load operation in GPTData::LoadMainTable() and
44*57696d54SAkhilesh Sanikop       // GPTData::LoadSecondTableAsMain() and then removing the GPTPart
45*57696d54SAkhilesh Sanikop       // size check in SizesOK() (in gpt.cc file).
46*57696d54SAkhilesh Sanikop       PartType partitionType;
47*57696d54SAkhilesh Sanikop       GUIDData uniqueGUID;
48*57696d54SAkhilesh Sanikop       uint64_t firstLBA;
49*57696d54SAkhilesh Sanikop       uint64_t lastLBA;
50*57696d54SAkhilesh Sanikop       Attributes attributes;
51*57696d54SAkhilesh Sanikop       uint16_t name[NAME_SIZE];
52*57696d54SAkhilesh Sanikop    public:
53*57696d54SAkhilesh Sanikop       GPTPart(void);
54*57696d54SAkhilesh Sanikop       GPTPart(const GPTPart &);
55*57696d54SAkhilesh Sanikop       ~GPTPart(void);
56*57696d54SAkhilesh Sanikop 
57*57696d54SAkhilesh Sanikop       // Simple data retrieval:
GetType(void)58*57696d54SAkhilesh Sanikop       PartType & GetType(void) {return partitionType;}
59*57696d54SAkhilesh Sanikop       uint16_t GetHexType(void) const;
60*57696d54SAkhilesh Sanikop       std::string GetTypeName(void);
61*57696d54SAkhilesh Sanikop       UnicodeString GetUTypeName(void);
GetUniqueGUID(void)62*57696d54SAkhilesh Sanikop       const GUIDData GetUniqueGUID(void) const {return uniqueGUID;}
GetFirstLBA(void)63*57696d54SAkhilesh Sanikop       uint64_t GetFirstLBA(void) const {return firstLBA;}
GetLastLBA(void)64*57696d54SAkhilesh Sanikop       uint64_t GetLastLBA(void) const {return lastLBA;}
65*57696d54SAkhilesh Sanikop       uint64_t GetLengthLBA(void) const;
GetAttributes(void)66*57696d54SAkhilesh Sanikop       Attributes GetAttributes(void) {return attributes;}
ShowAttributes(uint32_t partNum)67*57696d54SAkhilesh Sanikop       void ShowAttributes(uint32_t partNum) {attributes.ShowAttributes(partNum);}
68*57696d54SAkhilesh Sanikop       UnicodeString GetDescription(void);
69*57696d54SAkhilesh Sanikop       int IsUsed(void);
70*57696d54SAkhilesh Sanikop       int IsSizedForMBR(void);
71*57696d54SAkhilesh Sanikop 
72*57696d54SAkhilesh Sanikop       // Simple data assignment:
73*57696d54SAkhilesh Sanikop       void SetType(PartType t);
SetType(uint16_t hex)74*57696d54SAkhilesh Sanikop       void SetType(uint16_t hex) {partitionType = hex;}
SetUniqueGUID(GUIDData u)75*57696d54SAkhilesh Sanikop       void SetUniqueGUID(GUIDData u) {uniqueGUID = u;}
RandomizeUniqueGUID(void)76*57696d54SAkhilesh Sanikop       void RandomizeUniqueGUID(void) {uniqueGUID.Randomize();}
SetFirstLBA(uint64_t f)77*57696d54SAkhilesh Sanikop       void SetFirstLBA(uint64_t f) {firstLBA = f;}
SetLastLBA(uint64_t l)78*57696d54SAkhilesh Sanikop       void SetLastLBA(uint64_t l) {lastLBA = l;}
SetAttributes(uint64_t a)79*57696d54SAkhilesh Sanikop       void SetAttributes(uint64_t a) {attributes = a;}
SetAttributes(void)80*57696d54SAkhilesh Sanikop       void SetAttributes(void) {attributes.ChangeAttributes();}
81*57696d54SAkhilesh Sanikop       void SetName(const std::string & theName);
82*57696d54SAkhilesh Sanikop #ifdef USE_UTF16
83*57696d54SAkhilesh Sanikop       void SetName(const UnicodeString & theName);
84*57696d54SAkhilesh Sanikop #endif
85*57696d54SAkhilesh Sanikop       void SetDefaultDescription(void);
86*57696d54SAkhilesh Sanikop 
87*57696d54SAkhilesh Sanikop       // Additional functions
88*57696d54SAkhilesh Sanikop       GPTPart & operator=(const GPTPart & orig);
89*57696d54SAkhilesh Sanikop       bool operator<(const GPTPart &other) const;
90*57696d54SAkhilesh Sanikop       void ShowSummary(int partNum, uint32_t blockSize); // display summary information (1-line)
91*57696d54SAkhilesh Sanikop       void ShowDetails(uint32_t blockSize); // display detailed information (multi-line)
92*57696d54SAkhilesh Sanikop       void BlankPartition(void); // empty partition of data
93*57696d54SAkhilesh Sanikop       int DoTheyOverlap(const GPTPart & other); // returns 1 if there's overlap
94*57696d54SAkhilesh Sanikop       void ReversePartBytes(void); // reverse byte order of all integer fields
95*57696d54SAkhilesh Sanikop       void ReverseNameBytes(void); // reverse byte order of partition's name field
96*57696d54SAkhilesh Sanikop 
97*57696d54SAkhilesh Sanikop       // Functions requiring user interaction
98*57696d54SAkhilesh Sanikop       void ChangeType(void); // Change the type code
99*57696d54SAkhilesh Sanikop }; // struct GPTPart
100*57696d54SAkhilesh Sanikop 
101*57696d54SAkhilesh Sanikop #endif
102