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