aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGreg Hartman <ghartman@google.com>2016-04-21 18:20:25 -0700
committerGreg Hartman <ghartman@google.com>2017-03-27 20:47:37 +0000
commit3c01fa75137843b0e17646fff93ab4751c7e1a35 (patch)
tree3e851c43d190858d680a0be8e4d4f38791ce35da
parent437bfb5dd4dc917a8cdf02baf4bf06b80dd918ae (diff)
downloadgptfdisk-3c01fa75137843b0e17646fff93ab4751c7e1a35.tar.gz
Add an option to allow disk syncing to be turned off
Bug: 27795746 Change-Id: I47447a8467c409db526483ac7e4a9394cd68578a (cherry picked from commit fd9b918d2e49de4b7b7568aaa39f7e179752766d) (cherry picked from commit 2c2deeb032f6c158cf4f782e1765a4a21af88cb3)
-rw-r--r--gpt.cc9
-rw-r--r--gpt.h2
-rw-r--r--gptcl.cc4
3 files changed, 13 insertions, 2 deletions
diff --git a/gpt.cc b/gpt.cc
index 18247c5..91fa18f 100644
--- a/gpt.cc
+++ b/gpt.cc
@@ -69,6 +69,7 @@ GPTData::GPTData(void) {
state = gpt_valid;
device = "";
justLooking = 0;
+ syncing = 1;
mainCrcOk = 0;
secondCrcOk = 0;
mainPartsCrcOk = 0;
@@ -93,6 +94,7 @@ GPTData::GPTData(string filename) {
state = gpt_invalid;
device = "";
justLooking = 0;
+ syncing = 1;
mainCrcOk = 0;
secondCrcOk = 0;
mainPartsCrcOk = 0;
@@ -128,6 +130,7 @@ GPTData & GPTData::operator=(const GPTData & orig) {
diskSize = orig.diskSize;
state = orig.state;
justLooking = orig.justLooking;
+ syncing = orig.syncing;
mainCrcOk = orig.mainCrcOk;
secondCrcOk = orig.secondCrcOk;
mainPartsCrcOk = orig.mainPartsCrcOk;
@@ -1142,7 +1145,7 @@ int GPTData::SaveGPTData(int quiet) {
// original partition table from its cache. OTOH, such restoration might be
// desirable if the error occurs later; but that seems unlikely unless the initial
// write fails....
- if (syncIt)
+ if (syncIt && syncing)
myDisk.DiskSync();
if (allOK) { // writes completed OK
@@ -1374,7 +1377,9 @@ int GPTData::DestroyGPT(void) {
allOK = 0;
} // if
} // if
- myDisk.DiskSync();
+ if (syncing) {
+ myDisk.DiskSync();
+ }
myDisk.Close();
cout << "GPT data structures destroyed! You may now partition the disk using fdisk or\n"
<< "other utilities.\n";
diff --git a/gpt.h b/gpt.h
index e9afd06..1c0eaaf 100644
--- a/gpt.h
+++ b/gpt.h
@@ -72,6 +72,7 @@ protected:
uint64_t diskSize; // size of device, in blocks
GPTValidity state; // is GPT valid?
int justLooking; // Set to 1 if program launched with "-l" or if read-only
+ bool syncing; // Set to true if we should sync and reload the partition table
int mainCrcOk;
int secondCrcOk;
int mainPartsCrcOk;
@@ -189,6 +190,7 @@ public:
uint32_t ComputeAlignment(void); // Set alignment based on current partitions
uint32_t GetAlignment(void) {return sectorAlignment;}
void JustLooking(int i = 1) {justLooking = i;}
+ void TurnOffSyncing() {syncing = 0;}
void BeQuiet(int i = 1) {beQuiet = i;}
WhichToUse WhichWasUsed(void) {return whichWasUsed;}
diff --git a/gptcl.cc b/gptcl.cc
index e20048e..602be5c 100644
--- a/gptcl.cc
+++ b/gptcl.cc
@@ -86,6 +86,7 @@ int GPTDataCL::DoOptions(int argc, char* argv[]) {
{"randomize-guids", 'G', POPT_ARG_NONE, NULL, 'G', "randomize disk and partition GUIDs", ""},
{"hybrid", 'h', POPT_ARG_STRING, &hybrids, 'h', "create hybrid MBR", "partnum[:partnum...]"},
{"info", 'i', POPT_ARG_INT, &infoPartNum, 'i', "show detailed information on partition", "partnum"},
+ {"skip-sync", 'j', POPT_ARG_NONE, NULL, 'j', "Don't atempt to sync and update the parittion table", ""},
{"load-backup", 'l', POPT_ARG_STRING, &backupFile, 'l', "load GPT backup from file", "file"},
{"list-types", 'L', POPT_ARG_NONE, NULL, 'L', "list known partition types", ""},
{"gpttombr", 'm', POPT_ARG_STRING, &mbrParts, 'm', "convert GPT to MBR", "partnum[:partnum...]"},
@@ -260,6 +261,9 @@ int GPTDataCL::DoOptions(int argc, char* argv[]) {
case 'i':
ShowPartDetails(infoPartNum - 1);
break;
+ case 'j':
+ TurnOffSyncing();
+ break;
case 'l':
LoadBackupFile(backupFile, saveData, neverSaveData);
free(backupFile);