gdisk.cc revision 84aaff6b9cf3b802c621781cf9acd006aa5a3e66
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;
18e7b4ff9317fc4e551cf974684eaa88697de5a28srs
19fed16d043a14e8b86c97a6413aec7281fefcbcb5srs   cout << "GPT fdisk (gdisk) version " << GPTFDISK_VERSION << "\n\n";
20e7b4ff9317fc4e551cf974684eaa88697de5a28srs
2155d926192adc984462509b2966e23bc0d1129bbdsrs   if (!SizesOK())
2255d926192adc984462509b2966e23bc0d1129bbdsrs      exit(1);
2355d926192adc984462509b2966e23bc0d1129bbdsrs
2455d926192adc984462509b2966e23bc0d1129bbdsrs   switch (argc) {
2555d926192adc984462509b2966e23bc0d1129bbdsrs      case 1:
2655d926192adc984462509b2966e23bc0d1129bbdsrs         cout << "Type device filename, or press <Enter> to exit: ";
275a6085310b7f8fe1c35e56bcab7de161808b488dsrs         device = ReadString();
285a6085310b7f8fe1c35e56bcab7de161808b488dsrs         if (device.length() == 0)
295a6085310b7f8fe1c35e56bcab7de161808b488dsrs            exit(0);
305a6085310b7f8fe1c35e56bcab7de161808b488dsrs         else if (theGPT.LoadPartitions(device)) {
3100b6d7a4604e759eb3c92b3ecea608d6fe024b81srs            if (theGPT.GetState() != use_gpt)
3200b6d7a4604e759eb3c92b3ecea608d6fe024b81srs               WinWarning();
33a17fe69ec07c93a24894e4c4243f05af2bfc5bd7srs            theGPT.MainMenu(device);
345a6085310b7f8fe1c35e56bcab7de161808b488dsrs         } // if/elseif
3555d926192adc984462509b2966e23bc0d1129bbdsrs         break;
3655d926192adc984462509b2966e23bc0d1129bbdsrs      case 2: // basic usage
3700b6d7a4604e759eb3c92b3ecea608d6fe024b81srs         if (theGPT.LoadPartitions(argv[1])) {
3800b6d7a4604e759eb3c92b3ecea608d6fe024b81srs            if (theGPT.GetState() != use_gpt)
3900b6d7a4604e759eb3c92b3ecea608d6fe024b81srs               WinWarning();
40a17fe69ec07c93a24894e4c4243f05af2bfc5bd7srs            theGPT.MainMenu(argv[1]);
4100b6d7a4604e759eb3c92b3ecea608d6fe024b81srs         } // if
4255d926192adc984462509b2966e23bc0d1129bbdsrs         break;
4355d926192adc984462509b2966e23bc0d1129bbdsrs      case 3: // usage with "-l" option
44e7b4ff9317fc4e551cf974684eaa88697de5a28srs         if (strcmp(argv[1], "-l") == 0) {
455a6085310b7f8fe1c35e56bcab7de161808b488dsrs            device = (string) argv[2];
46e7b4ff9317fc4e551cf974684eaa88697de5a28srs         } else if (strcmp(argv[2], "-l") == 0) {
475a6085310b7f8fe1c35e56bcab7de161808b488dsrs            device = (string) argv[1];
48e7b4ff9317fc4e551cf974684eaa88697de5a28srs         } else { // 3 arguments, but none is "-l"
49fed16d043a14e8b86c97a6413aec7281fefcbcb5srs            cerr << "Usage: " << argv[0] << " [-l] device_file\n";
50e7b4ff9317fc4e551cf974684eaa88697de5a28srs         } // if/elseif/else
515a6085310b7f8fe1c35e56bcab7de161808b488dsrs         if (device != "") {
525d58fe0ea12c9c727c8a970c8e1ac08ea7fbe05fsrs            theGPT.JustLooking();
535a6085310b7f8fe1c35e56bcab7de161808b488dsrs            if (theGPT.LoadPartitions(device))
5464cbd171067eb34054741bfcd73f0b91d727a371srs               theGPT.DisplayGPTData();
55e7b4ff9317fc4e551cf974684eaa88697de5a28srs         } // if
5655d926192adc984462509b2966e23bc0d1129bbdsrs         break;
5755d926192adc984462509b2966e23bc0d1129bbdsrs      default:
5855d926192adc984462509b2966e23bc0d1129bbdsrs         cerr << "Usage: " << argv[0] << " [-l] device_file\n";
5955d926192adc984462509b2966e23bc0d1129bbdsrs         break;
6055d926192adc984462509b2966e23bc0d1129bbdsrs   } // switch
6184aaff6b9cf3b802c621781cf9acd006aa5a3e66Roderick W. Smith   return 1 ;
6284aaff6b9cf3b802c621781cf9acd006aa5a3e66Roderick W. Smith} // main
63