From 9ae60195b9d24c01f535ade5b7bcf0e63c0600be Mon Sep 17 00:00:00 2001 From: Rod Smith Date: Thu, 5 Jul 2018 16:50:13 -0400 Subject: Added explicit copy constructors and made other tweaks to avoid compiler complaints. --- basicmbr.cc | 76 +++++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 54 insertions(+), 22 deletions(-) (limited to 'basicmbr.cc') diff --git a/basicmbr.cc b/basicmbr.cc index 8fbffd1..dd48706 100644 --- a/basicmbr.cc +++ b/basicmbr.cc @@ -43,6 +43,36 @@ BasicMBRData::BasicMBRData(void) { EmptyMBR(); } // BasicMBRData default constructor +BasicMBRData::BasicMBRData(const BasicMBRData & orig) { + int i; + + if (&orig != this) { + memcpy(code, orig.code, 440); + diskSignature = orig.diskSignature; + nulls = orig.nulls; + MBRSignature = orig.MBRSignature; + blockSize = orig.blockSize; + diskSize = orig.diskSize; + numHeads = orig.numHeads; + numSecspTrack = orig.numSecspTrack; + canDeleteMyDisk = orig.canDeleteMyDisk; + device = orig.device; + state = orig.state; + + myDisk = new DiskIO; + if (myDisk == NULL) { + cerr << "Unable to allocate memory in BasicMBRData copy constructor! Terminating!\n"; + exit(1); + } // if + if (orig.myDisk != NULL) + myDisk->OpenForRead(orig.myDisk->GetName()); + + for (i = 0; i < MAX_MBR_PARTS; i++) { + partitions[i] = orig.partitions[i]; + } // for + } // if +} // BasicMBRData copy constructor + BasicMBRData::BasicMBRData(string filename) { blockSize = SECTOR_SIZE; diskSize = 0; @@ -73,29 +103,31 @@ BasicMBRData::~BasicMBRData(void) { BasicMBRData & BasicMBRData::operator=(const BasicMBRData & orig) { int i; - memcpy(code, orig.code, 440); - diskSignature = orig.diskSignature; - nulls = orig.nulls; - MBRSignature = orig.MBRSignature; - blockSize = orig.blockSize; - diskSize = orig.diskSize; - numHeads = orig.numHeads; - numSecspTrack = orig.numSecspTrack; - canDeleteMyDisk = orig.canDeleteMyDisk; - device = orig.device; - state = orig.state; - - myDisk = new DiskIO; - if (myDisk == NULL) { - cerr << "Unable to allocate memory in BasicMBRData::operator=()! Terminating!\n"; - exit(1); - } // if - if (orig.myDisk != NULL) - myDisk->OpenForRead(orig.myDisk->GetName()); + if (&orig != this) { + memcpy(code, orig.code, 440); + diskSignature = orig.diskSignature; + nulls = orig.nulls; + MBRSignature = orig.MBRSignature; + blockSize = orig.blockSize; + diskSize = orig.diskSize; + numHeads = orig.numHeads; + numSecspTrack = orig.numSecspTrack; + canDeleteMyDisk = orig.canDeleteMyDisk; + device = orig.device; + state = orig.state; - for (i = 0; i < MAX_MBR_PARTS; i++) { - partitions[i] = orig.partitions[i]; - } // for + myDisk = new DiskIO; + if (myDisk == NULL) { + cerr << "Unable to allocate memory in BasicMBRData::operator=()! Terminating!\n"; + exit(1); + } // if + if (orig.myDisk != NULL) + myDisk->OpenForRead(orig.myDisk->GetName()); + + for (i = 0; i < MAX_MBR_PARTS; i++) { + partitions[i] = orig.partitions[i]; + } // for + } // if return *this; } // BasicMBRData::operator=() -- cgit v1.2.1