Updates for version 0.4.2

New feature: Ability to edit disk images.
Several small bug fixes and feature enhancements (see CHANGELOG).
diff --git a/mbr.cc b/mbr.cc
index 28745b3..4e789e1 100644
--- a/mbr.cc
+++ b/mbr.cc
@@ -179,11 +179,12 @@
 
    // Find block size
    if (checkBlockSize) {
-      if ((blockSize = GetBlockSize(fd)) == -1) {
-         blockSize = SECTOR_SIZE;
-         printf("Unable to determine sector size; assuming %lu bytes!\n",
-               (unsigned long) SECTOR_SIZE);
-      } // if
+      blockSize = GetBlockSize(fd);
+//      if ((blockSize = GetBlockSize(fd)) == -1) {
+//         blockSize = SECTOR_SIZE;
+//         printf("Unable to determine sector size; assuming %lu bytes!\n",
+//               (unsigned long) SECTOR_SIZE);
+//      } // if
    } // if (checkBlockSize)
 
    // Load logical partition data, if any is found....
@@ -291,6 +292,7 @@
    } // for i...
 
    // Now write that data structure...
+   lseek64(fd, 0, SEEK_SET);
    write(fd, &tempMBR, 512);
 
 /*   write(fd, code, 440);
@@ -298,7 +300,7 @@
    write(fd, &nulls, 2);
    write(fd, partitions, 64);
    write(fd, &MBRSignature, 2); */
-   
+
    // Reverse the byte order back, if necessary
    if (IsLittleEndian() == 0) {
       ReverseBytes(&diskSignature, 4);
@@ -496,6 +498,20 @@
    return found;
 } // MBRData::MakeBiggestPart(int i)
 
+// Delete partition #i
+void MBRData::DeletePartition(int i) {
+   int j;
+
+   partitions[i].firstLBA = UINT32_C(0);
+   partitions[i].lengthLBA = UINT32_C(0);
+   partitions[i].status = UINT8_C(0);
+   partitions[i].partitionType = UINT8_C(0);
+   for (j = 0; j < 3; j++) {
+      partitions[i].firstSector[j] = UINT8_C(0);
+      partitions[i].lastSector[j] = UINT8_C(0);
+   } // for j (CHS data blanking)
+} // MBRData::DeletePartition()
+
 // Delete a partition if one exists at the specified location.
 // Returns 1 if a partition was deleted, 0 otherwise....
 // Used to help keep GPT & hybrid MBR partitions in sync....
@@ -509,14 +525,7 @@
       for (i = 0; i < 4; i++) {
          if ((partitions[i].firstLBA == start32) && (partitions[i].lengthLBA = length32) &&
              (partitions[i].partitionType != 0xEE)) {
-            partitions[i].firstLBA = UINT32_C(0);
-            partitions[i].lengthLBA = UINT32_C(0);
-            partitions[i].status = UINT8_C(0);
-            partitions[i].partitionType = UINT8_C(0);
-            for (j = 0; j < 3; j++) {
-               partitions[i].firstSector[j] = UINT8_C(0);
-               partitions[i].lastSector[j] = UINT8_C(0);
-            } // for j (CHS data blanking)
+            DeletePartition(i);
             OptimizeEESize();
             deleted = 1;
          } // if (match found)
@@ -594,7 +603,7 @@
 // setup to begin with....
 void MBRData::MakePart(int num, uint32_t start, uint32_t length, int type,
                        int bootable) {
-   
+
    partitions[num].status = (uint8_t) bootable * (uint8_t) 0x80;
    partitions[num].firstSector[0] = UINT8_C(0);
    partitions[num].firstSector[1] = UINT8_C(0);
@@ -657,7 +666,7 @@
 
 // Finds the first free sector on the disk from start backward.
 uint32_t MBRData::FindFirstInFree(uint32_t start) {
-   uint32_t nearestStart, bestLastLBA, thisLastLBA;
+   uint32_t bestLastLBA, thisLastLBA;
    int i;
 
    bestLastLBA = 1;
@@ -752,7 +761,7 @@
       // partitions (Note similar protection is in GPTData::XFormPartitions(),
       // but I want it here too in case I call this function in another
       // context in the future....)
-      if ((origType != 0x05) && (origType != 0x0f) && (origType != 0x85) && 
+      if ((origType != 0x05) && (origType != 0x0f) && (origType != 0x85) &&
           (origType != 0x00) && (origType != 0xEE)) {
          firstSector = (uint64_t) origPart->firstLBA;
          newPart.SetFirstLBA(firstSector);