1e7b4ff9317fc4e551cf974684eaa88697de5a28srs// gdisk.cc
2e7b4ff9317fc4e551cf974684eaa88697de5a28srs// Program modelled after Linux fdisk, but it manipulates GPT partitions
3e7b4ff9317fc4e551cf974684eaa88697de5a28srs// rather than MBR partitions.
4e7b4ff9317fc4e551cf974684eaa88697de5a28srs//
5e4ac11ebee0ad586a538f49b9c0e32ad19cae665srs// by Rod Smith, project began February 2009
6e7b4ff9317fc4e551cf974684eaa88697de5a28srs
7e3ee733ff8690af7568dac665bc20ecf869dea1dRoderick W. Smith/* This program is copyright (c) 2009-2013 by Roderick W. Smith. It is distributed
8221e08768de7fe42ba533ca22baf671420569c07srs  under the terms of the GNU GPL version 2, as detailed in the COPYING file. */
9221e08768de7fe42ba533ca22baf671420569c07srs
10fed16d043a14e8b86c97a6413aec7281fefcbcb5srs#include <string.h>
11fed16d043a14e8b86c97a6413aec7281fefcbcb5srs#include <iostream>
1208bb0da07953af605b4918e268272de15ac151aasrs#include "gpttext.h"
13e7b4ff9317fc4e551cf974684eaa88697de5a28srs
14e7b4ff9317fc4e551cf974684eaa88697de5a28srsint main(int argc, char* argv[]) {
1508bb0da07953af605b4918e268272de15ac151aasrs   GPTDataTextUI theGPT;
165a6085310b7f8fe1c35e56bcab7de161808b488dsrs   string device = "";
175a6085310b7f8fe1c35e56bcab7de161808b488dsrs   UnicodeString uString;
18a920398fa393f9d6301b32b191bc01e086ab8bc8Roderick W. Smith   int isError = 0;
19e7b4ff9317fc4e551cf974684eaa88697de5a28srs
20e62b52732689bc467051688647dbad3d5daa5cb6Roderick W. Smith#ifndef EFI
21fed16d043a14e8b86c97a6413aec7281fefcbcb5srs   cout << "GPT fdisk (gdisk) version " << GPTFDISK_VERSION << "\n\n";
22e62b52732689bc467051688647dbad3d5daa5cb6Roderick W. Smith#endif /*EFI*/
23e7b4ff9317fc4e551cf974684eaa88697de5a28srs
2455d926192adc984462509b2966e23bc0d1129bbdsrs   if (!SizesOK())
2555d926192adc984462509b2966e23bc0d1129bbdsrs      exit(1);
2655d926192adc984462509b2966e23bc0d1129bbdsrs
2755d926192adc984462509b2966e23bc0d1129bbdsrs   switch (argc) {
2855d926192adc984462509b2966e23bc0d1129bbdsrs      case 1:
2955d926192adc984462509b2966e23bc0d1129bbdsrs         cout << "Type device filename, or press <Enter> to exit: ";
305a6085310b7f8fe1c35e56bcab7de161808b488dsrs         device = ReadString();
315a6085310b7f8fe1c35e56bcab7de161808b488dsrs         if (device.length() == 0)
325a6085310b7f8fe1c35e56bcab7de161808b488dsrs            exit(0);
335a6085310b7f8fe1c35e56bcab7de161808b488dsrs         else if (theGPT.LoadPartitions(device)) {
3400b6d7a4604e759eb3c92b3ecea608d6fe024b81srs            if (theGPT.GetState() != use_gpt)
3500b6d7a4604e759eb3c92b3ecea608d6fe024b81srs               WinWarning();
36a17fe69ec07c93a24894e4c4243f05af2bfc5bd7srs            theGPT.MainMenu(device);
375a6085310b7f8fe1c35e56bcab7de161808b488dsrs         } // if/elseif
3855d926192adc984462509b2966e23bc0d1129bbdsrs         break;
3955d926192adc984462509b2966e23bc0d1129bbdsrs      case 2: // basic usage
4000b6d7a4604e759eb3c92b3ecea608d6fe024b81srs         if (theGPT.LoadPartitions(argv[1])) {
4100b6d7a4604e759eb3c92b3ecea608d6fe024b81srs            if (theGPT.GetState() != use_gpt)
4200b6d7a4604e759eb3c92b3ecea608d6fe024b81srs               WinWarning();
43a17fe69ec07c93a24894e4c4243f05af2bfc5bd7srs            theGPT.MainMenu(argv[1]);
4400b6d7a4604e759eb3c92b3ecea608d6fe024b81srs         } // if
4555d926192adc984462509b2966e23bc0d1129bbdsrs         break;
4655d926192adc984462509b2966e23bc0d1129bbdsrs      case 3: // usage with "-l" option
47e7b4ff9317fc4e551cf974684eaa88697de5a28srs         if (strcmp(argv[1], "-l") == 0) {
485a6085310b7f8fe1c35e56bcab7de161808b488dsrs            device = (string) argv[2];
49e7b4ff9317fc4e551cf974684eaa88697de5a28srs         } else if (strcmp(argv[2], "-l") == 0) {
505a6085310b7f8fe1c35e56bcab7de161808b488dsrs            device = (string) argv[1];
51e7b4ff9317fc4e551cf974684eaa88697de5a28srs         } else { // 3 arguments, but none is "-l"
52fed16d043a14e8b86c97a6413aec7281fefcbcb5srs            cerr << "Usage: " << argv[0] << " [-l] device_file\n";
53a920398fa393f9d6301b32b191bc01e086ab8bc8Roderick W. Smith            isError = 1;
54e7b4ff9317fc4e551cf974684eaa88697de5a28srs         } // if/elseif/else
555a6085310b7f8fe1c35e56bcab7de161808b488dsrs         if (device != "") {
565d58fe0ea12c9c727c8a970c8e1ac08ea7fbe05fsrs            theGPT.JustLooking();
575a6085310b7f8fe1c35e56bcab7de161808b488dsrs            if (theGPT.LoadPartitions(device))
5864cbd171067eb34054741bfcd73f0b91d727a371srs               theGPT.DisplayGPTData();
59a920398fa393f9d6301b32b191bc01e086ab8bc8Roderick W. Smith            else
60a920398fa393f9d6301b32b191bc01e086ab8bc8Roderick W. Smith               isError = 1;
61e7b4ff9317fc4e551cf974684eaa88697de5a28srs         } // if
6255d926192adc984462509b2966e23bc0d1129bbdsrs         break;
6355d926192adc984462509b2966e23bc0d1129bbdsrs      default:
6455d926192adc984462509b2966e23bc0d1129bbdsrs         cerr << "Usage: " << argv[0] << " [-l] device_file\n";
65a920398fa393f9d6301b32b191bc01e086ab8bc8Roderick W. Smith         isError = 1;
6655d926192adc984462509b2966e23bc0d1129bbdsrs         break;
6755d926192adc984462509b2966e23bc0d1129bbdsrs   } // switch
68a920398fa393f9d6301b32b191bc01e086ab8bc8Roderick W. Smith   return (isError);
6984aaff6b9cf3b802c621781cf9acd006aa5a3e66Roderick W. Smith} // main
70