Logo Search packages:      
Sourcecode: gdisk version File versions  Download package

partnotes.h

/*
    partnotes.h -- Class that takes notes on GPT partitions for purpose of MBR conversion
    Copyright (C) 2010 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 __PARTNOTES_H
#define __PARTNOTES_H

#include "gpt.h"
#include "gptpart.h"

using namespace std;

#define WILL_NOT_CONVERT 0
#define PRIMARY 1
#define LOGICAL 2

// Data structure used in GPT-to-MBR conversions; holds pointer to GPT
// partition number, start and end sectors, and a few MBR-specific details
00035 struct PartInfo {
   int gptPartNum;
   int spaceBefore; // boolean; if 1, can theoretically become a logical part.
   int active; // boolean
   int type; // WILL_NOT_CONVERT, PRIMARY, or LOGICAL
   uint64_t firstLBA;
   uint64_t lastLBA;
   unsigned int hexCode;
   struct PartInfo *next;
};

00046 struct ExtendedInfo {
   int startNum;
   int numLogicals;
};

00051 class PartNotes {
   protected:
      struct PartInfo dummyNote;
      struct PartInfo *notes;
      struct PartInfo *currentNote;
      int currentIndex;
      GPTPart *gptParts;
      int gptTableSize;
      int blockSize;

      void DeleteNotes(void);
   public:
      PartNotes();
      PartNotes(GPTPart *parts, GPTData *gpt, int num, int blockSize);
      ~PartNotes();

      // Add partition notes (little or no error checking)
      int PassPartitions(GPTPart *parts, GPTData *gpt, int num, int blockSize);
      int AddToEnd(struct PartInfo* newOne);
      int AddToStart(struct PartInfo* newOne);
      void SetType(int partNum, int type); // type is PRIMARY, LOGICAL, or WILL_NOT_CONVERT
      void SetMbrHexType(int i, uint8_t type);
      void ToggleActiveStatus(int partNum);

      // Retrieve data or metadata
      void Rewind(void);
      int GetNextInfo(struct PartInfo * info);
      int GetNumParts();
      int GetNumPrimary();
      int GetNumExtended();
      int GetNumLogical();
      int GetType(int partNum);
      uint8_t GetMbrHexType(int i);
      int GetGptNum(int partNum);
      int GetActiveStatus(int partNum);
      int CanBeLogical(int partNum); // returns boolean
      int FindExtended(int &start);
      int IsSorted(void);
      int IsLegal(void); // returns boolean

      // Manipulate data or metadata
      void RemoveDuplicates(void);
      int MakeItLegal(void);
      void TrimSmallestExtended(void);

      // Interact with users, possibly changing data with error handling
      void ShowSummary(void);
      int MakeChange(int partNum);
      int ChangeType(int partNum, int newType);
};

#endif // __PARTNOTES_H

Generated by  Doxygen 1.6.0   Back to index