Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
gptfdisk/gptpart.h
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
101 lines (90 sloc)
3.71 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// C++ Interface: gptpart | |
// | |
// Description: Class to implement a single GPT partition | |
// | |
// | |
// Author: Rod Smith <rodsmith@rodsbooks.com>, (C) 2009 | |
// | |
// Copyright: See COPYING file that comes with this distribution | |
// | |
// | |
// This program is copyright (c) 2009 by Roderick W. Smith. It is distributed | |
// under the terms of the GNU GPL version 2, as detailed in the COPYING file. | |
#ifndef __GPTPART_H | |
#define __GPTPART_H | |
#include <stdint.h> | |
#include <string> | |
#include <sys/types.h> | |
#include "support.h" | |
#include "parttypes.h" | |
#include "guid.h" | |
#include "attributes.h" | |
using namespace std; | |
// Values returned by GPTPart::IsSizedForMBR() | |
#define MBR_SIZED_GOOD 0 /* Whole partition under 2^32 sectors */ | |
#define MBR_SIZED_IFFY 1 /* Partition starts under 2^32 & is less than 2^32, but ends over 2^32 */ | |
#define MBR_SIZED_BAD 2 /* Partition starts over 2^32, is bigger than 2^32, or otherwise bad */ | |
/**************************************** | |
* * | |
* GPTPart class and related structures * | |
* * | |
****************************************/ | |
class GPTPart { | |
protected: | |
// Caution: The non-static data in GPTPart is precisely the right size | |
// to enable easy loading of the data directly from disk. If any | |
// non-static variables are added to the below, the data size will | |
// change and the program will stop working. This can be corrected by | |
// adjusting the data-load operation in GPTData::LoadMainTable() and | |
// GPTData::LoadSecondTableAsMain() and then removing the GPTPart | |
// size check in SizesOK() (in gpt.cc file). | |
PartType partitionType; | |
GUIDData uniqueGUID; | |
uint64_t firstLBA; | |
uint64_t lastLBA; | |
Attributes attributes; | |
uint16_t name[NAME_SIZE]; | |
public: | |
GPTPart(void); | |
~GPTPart(void); | |
// Simple data retrieval: | |
PartType & GetType(void) {return partitionType;} | |
uint16_t GetHexType(void) const; | |
string GetTypeName(void); | |
UnicodeString GetUTypeName(void); | |
const GUIDData GetUniqueGUID(void) const {return uniqueGUID;} | |
uint64_t GetFirstLBA(void) const {return firstLBA;} | |
uint64_t GetLastLBA(void) const {return lastLBA;} | |
uint64_t GetLengthLBA(void) const; | |
Attributes GetAttributes(void) {return attributes;} | |
void ShowAttributes(uint32_t partNum) {attributes.ShowAttributes(partNum);} | |
UnicodeString GetDescription(void); | |
int IsUsed(void); | |
int IsSizedForMBR(void); | |
// Simple data assignment: | |
void SetType(PartType t); | |
void SetType(uint16_t hex) {partitionType = hex;} | |
void SetUniqueGUID(GUIDData u) {uniqueGUID = u;} | |
void RandomizeUniqueGUID(void) {uniqueGUID.Randomize();} | |
void SetFirstLBA(uint64_t f) {firstLBA = f;} | |
void SetLastLBA(uint64_t l) {lastLBA = l;} | |
void SetAttributes(uint64_t a) {attributes = a;} | |
void SetAttributes(void) {attributes.ChangeAttributes();} | |
void SetName(const string & theName); | |
#ifdef USE_UTF16 | |
void SetName(const UnicodeString & theName); | |
#endif | |
void SetDefaultDescription(void); | |
// Additional functions | |
GPTPart & operator=(const GPTPart & orig); | |
bool operator<(const GPTPart &other) const; | |
void ShowSummary(int partNum, uint32_t blockSize); // display summary information (1-line) | |
void ShowDetails(uint32_t blockSize); // display detailed information (multi-line) | |
void BlankPartition(void); // empty partition of data | |
int DoTheyOverlap(const GPTPart & other); // returns 1 if there's overlap | |
void ReversePartBytes(void); // reverse byte order of all integer fields | |
// Functions requiring user interaction | |
void ChangeType(void); // Change the type code | |
}; // struct GPTPart | |
#endif |