aboutsummaryrefslogtreecommitdiff
path: root/mbrpart.h
diff options
context:
space:
mode:
authorsrs5694 <srs5694@users.sourceforge.net>2011-03-12 01:22:42 -0500
committersrs5694 <srs5694@users.sourceforge.net>2011-03-12 01:22:42 -0500
commit96312236d7f0c857efc95871a31857e24ecdc81b (patch)
tree265d546e4d67b087399a76f683f3da0e4cb88b4f /mbrpart.h
parent64cbd171067eb34054741bfcd73f0b91d727a371 (diff)
downloadgptfdisk-96312236d7f0c857efc95871a31857e24ecdc81b.tar.gz
Added files for 0.7.0
Diffstat (limited to 'mbrpart.h')
-rw-r--r--mbrpart.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/mbrpart.h b/mbrpart.h
new file mode 100644
index 0000000..4d84e7a
--- /dev/null
+++ b/mbrpart.h
@@ -0,0 +1,111 @@
+/*
+ MBRPart class, part of GPT fdisk program family.
+ Copyright (C) 2011 Roderick W. Smith
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+*/
+
+#ifndef MBRPART_H
+#define MBRPART_H
+
+#include <stdint.h>
+
+#define MAX_HEADS 255 /* numbered 0 - 254 */
+#define MAX_SECSPERTRACK 63 /* numbered 1 - 63 */
+#define MAX_CYLINDERS 1024 /* numbered 0 - 1023 */
+
+#define NONE 0 /* don't include partition when writing */
+#define PRIMARY 1 /* write partition as primary */
+#define LOGICAL 2 /* write partition as logical */
+#define EBR 4 /* sector is used as an EBR or MBR */
+#define INVALID 8 /* sector number is too large for disk */
+
+using namespace std;
+
+// Data for a single MBR partition record
+// Note that firstSector and lastSector are in CHS addressing, which
+// splits the bits up in a weird way.
+// On read or write of MBR entries, firstLBA is an absolute disk sector.
+// On read of logical entries, it's relative to the EBR record for that
+// partition. When writing EBR records, it's relative to the extended
+// partition's start.
+#pragma pack(1)
+struct MBRRecord {
+ uint8_t status;
+ uint8_t firstSector[3];
+ uint8_t partitionType;
+ uint8_t lastSector[3];
+ uint32_t firstLBA; // see above
+ uint32_t lengthLBA;
+}; // struct MBRRecord
+
+class MBRPart {
+protected:
+ uint8_t status;
+ uint8_t firstSector[3];
+ uint8_t partitionType;
+ uint8_t lastSector[3];
+ uint32_t firstLBA; // see above
+ uint32_t lengthLBA;
+ int includeAs; // PRIMARY, LOGICAL, or NONE
+ int canBeLogical;
+ int canBePrimary;
+ static uint32_t numHeads;
+ static uint32_t numSecspTrack;
+ static uint64_t diskSize;
+ static uint32_t blockSize;
+ static int numInstances;
+
+public:
+ MBRPart();
+ MBRPart(const MBRPart& other);
+ virtual ~MBRPart();
+ virtual MBRPart& operator=(const MBRPart& orig);
+ virtual MBRPart& operator=(const struct MBRRecord& orig);
+
+ // Set information on partitions or disks...
+ void SetGeometry(uint32_t heads, uint32_t sectors, uint64_t diskSize, uint32_t blockSize);
+ void Empty(void);
+ void SetStartLBA(uint64_t s);
+ void SetLengthLBA(uint64_t l);
+ void SetLocation(uint64_t start, uint64_t length);
+ int SetType(uint8_t typeCode, int isExtended = 0);
+ void SetStatus(uint8_t s) {status = s;}
+ void SetInclusion(int status = PRIMARY) {includeAs = status;}
+ void SetCanBeLogical(int c) {canBeLogical = c;}
+ void SetCanBePrimary(int c) {canBePrimary = c;}
+ void StoreInStruct(struct MBRRecord *theStruct);
+
+ // Get information on partitions or disk....
+ uint8_t GetType(void) {return partitionType;}
+ uint8_t GetStatus(void) {return status;}
+ uint64_t GetStartLBA(void) {return firstLBA;}
+ uint64_t GetLengthLBA(void) {return lengthLBA;}
+ uint64_t GetLastLBA(void) const;
+ uint8_t GetInclusion(void) {return includeAs;}
+ int CanBeLogical(void) {return canBeLogical;}
+ int CanBePrimary(void) {return canBePrimary;}
+ int DoTheyOverlap (const MBRPart& other);
+
+ // Adjust information on partitions or disks...
+ void RecomputeCHS(void);
+ int LBAtoCHS(uint32_t lba, uint8_t * chs);
+ void ReverseByteOrder(void);
+
+ // User I/O...
+ void ShowData(int isGpt);
+}; // MBRPart
+
+#endif // MBRPART_H