Misc. bug fixes & restructuring.
diff --git a/gptpart.cc b/gptpart.cc
index 2af5db7..63e453d 100644
--- a/gptpart.cc
+++ b/gptpart.cc
@@ -24,16 +24,12 @@
 using namespace std;
 
 GPTPart::GPTPart(void) {
-   int i;
-
    partitionType.Zero();
    uniqueGUID.Zero();
    firstLBA = 0;
    lastLBA = 0;
    attributes = 0;
-
-   for (i = 0; i < NAME_SIZE; i++)
-      name[i] = '\0';
+   memset(name, 0, NAME_SIZE);
 } // Default constructor
 
 GPTPart::~GPTPart(void) {
@@ -94,35 +90,32 @@
 // string. This function creates a simple-minded copy for this.
 void GPTPart::SetName(const string & theName) {
    char newName[NAME_SIZE];
-   char *junk;
-   int i;
+   size_t i;
 
-   // Blank out new name string, just to be on the safe side....
-   for (i = 0; i < NAME_SIZE; i++)
-      newName[i] = '\0';
+   // Blank out new name string, so that it will terminate in a null
+   // when data are copied to it....
+   memset(newName, 0, NAME_SIZE);
 
    if (theName == "") { // No name specified, so get one from the user
       cout << "Enter name: ";
-      junk = fgets(newName, NAME_SIZE / 2, stdin);
+      if (!fgets(newName, NAME_SIZE / 2 + 1, stdin)) {
+         cerr << "Critical error! Failed fgets() in GPTPart::SetName()!\n";
+         exit(1);
+      }
 
       // Input is likely to include a newline, so remove it....
-      i = (int) strlen(newName);
-      if ((i > 0) && (i <= NAME_SIZE))
-         if (newName[i - 1] == '\n')
-            newName[i - 1] = '\0';
+      i = strlen(newName);
+      if (i && newName[i - 1] == '\n')
+         newName[i - 1] = '\0';
    } else {
       strcpy(newName, theName.substr(0, NAME_SIZE / 2).c_str());
    } // if
 
    // Copy the C-style ASCII string from newName into a form that the GPT
    // table will accept....
-   for (i = 0; i < NAME_SIZE; i++) {
-      if ((i % 2) == 0) {
-         name[i] = newName[(i / 2)];
-      } else {
-         name[i] = '\0';
-      } // if/else
-   } // for
+   memset(name, 0, NAME_SIZE);
+   for (i = 0; i < NAME_SIZE / 2; i++)
+      name[i * 2] = newName[i];
 } // GPTPart::SetName()
 
 // Set the name for the partition based on the current GUID partition type
@@ -132,22 +125,19 @@
 } // GPTPart::SetDefaultDescription()
 
 GPTPart & GPTPart::operator=(const GPTPart & orig) {
-   int i;
-
    partitionType = orig.partitionType;
    uniqueGUID = orig.uniqueGUID;
    firstLBA = orig.firstLBA;
    lastLBA = orig.lastLBA;
    attributes = orig.attributes;
-   for (i = 0; i < NAME_SIZE; i++)
-      name[i] = orig.name[i];
+   memcpy(name, orig.name, NAME_SIZE);
    return *this;
 } // assignment operator
 
 // Display summary information; does nothing if the partition is empty.
 void GPTPart::ShowSummary(int partNum, uint32_t blockSize) {
    string sizeInSI;
-   int i;
+   size_t i;
 
    if (firstLBA != 0) {
       sizeInSI = BytesToSI(lastLBA - firstLBA + 1, blockSize);
@@ -159,7 +149,7 @@
       cout.width(14);
       cout << lastLBA  << "   ";
       cout << BytesToSI(lastLBA - firstLBA + 1, blockSize) << "  ";
-      for (i = 0; i < 10 - (int) sizeInSI.length(); i++)
+      for (i = 0; i < 10 - sizeInSI.length(); i++)
          cout << " ";
       cout.fill('0');
       cout.width(4);
@@ -201,30 +191,21 @@
 
 // Blank (delete) a single partition
 void GPTPart::BlankPartition(void) {
-   int j;
-
    uniqueGUID.Zero();
    partitionType.Zero();
    firstLBA = 0;
    lastLBA = 0;
    attributes = 0;
-   for (j = 0; j < NAME_SIZE; j++)
-      name[j] = '\0';
+   memset(name, 0, NAME_SIZE);
 } // GPTPart::BlankPartition
 
 // Returns 1 if the two partitions overlap, 0 if they don't
 int GPTPart::DoTheyOverlap(const GPTPart & other) {
-   int theyDo = 0;
-
    // Don't bother checking unless these are defined (both start and end points
    // are 0 for undefined partitions, so just check the start points)
-   if ((firstLBA != 0) && (other.firstLBA != 0)) {
-      if ((firstLBA < other.lastLBA) && (lastLBA >= other.firstLBA))
-         theyDo = 1;
-      if ((other.firstLBA < lastLBA) && (other.lastLBA >= firstLBA))
-         theyDo = 1;
-   } // if
-   return (theyDo);
+//   cout << "Entering GPTPart::DoTheyOverlap()\n";
+   return firstLBA && other.firstLBA &&
+          (firstLBA <= other.lastLBA) != (lastLBA < other.firstLBA);
 } // GPTPart::DoTheyOverlap()
 
 // Reverse the bytes of integral data types; used on big-endian systems.
@@ -242,17 +223,18 @@
 // name is the generic one for the partition type.
 void GPTPart::ChangeType(void) {
    char line[255];
-   char* junk;
-   unsigned int changeName = 0;
+   int changeName;
    PartType tempType = (GUIDData) "00000000-0000-0000-0000-000000000000";
 
-   if (GetDescription() == GetTypeName())
-      changeName = UINT16_C(1);
+   changeName = (GetDescription() == GetTypeName());
 
    cout << "Current type is '" << GetTypeName() << "'\n";
    do {
       cout << "Hex code or GUID (L to show codes, Enter = 0700): ";
-      junk = fgets(line, 255, stdin);
+      if (!fgets(line, sizeof(line), stdin)) {
+         cerr << "Critical error! Failed fgets() in GPTPart::ChangeType()!\n";
+         exit(1);
+      } // if
       if ((line[0] == 'L') || (line[0] == 'l')) {
          partitionType.ShowAllTypes();
       } else {