Fix Ctrl+D problems; 0.8.4 release
diff --git a/NEWS b/NEWS
index 290e9b6..6512864 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,12 @@
+0.8.4 (3/25/2012):
+------------------
+
+- REALLY fixed Ctrl+D problems! Now gdisk terminates upon receiving a
+  Ctrl+D. In all previous versions, it could lock itself into a CPU-hogging
+  loop if launched via "sudo" from a terminal window that was then closed
+  or if Ctrl+D was pressed at certain input prompts (for a partition name
+  or sector number, for instance).
+
 0.8.3 (3/23/2012):
 ------------------
 
diff --git a/basicmbr.cc b/basicmbr.cc
index fd5f30a..7483734 100644
--- a/basicmbr.cc
+++ b/basicmbr.cc
@@ -1532,7 +1532,7 @@
       cout << prompt;
       switch (ReadString()[0]) {
          case '\0':
-            goOn = !cin.eof();
+            goOn = cin.good();
             break;
          case 'a': case 'A':
             num = GetNumber(1, MAX_MBR_PARTS, 1, "Toggle active flag for partition: ") - 1;
diff --git a/cgdisk.8 b/cgdisk.8
index 1ec7480..45c51ff 100644
--- a/cgdisk.8
+++ b/cgdisk.8
@@ -1,6 +1,6 @@
 .\" Copyright 2011, 2012 Roderick W. Smith (rodsmith@rodsbooks.com)
 .\" May be distributed under the GNU General Public License
-.TH "CGDISK" "8" "0.8.3" "Roderick W. Smith" "GPT fdisk Manual"
+.TH "CGDISK" "8" "0.8.4" "Roderick W. Smith" "GPT fdisk Manual"
 .SH "NAME"
 cgdisk \- Curses-based GUID partition table (GPT) manipulator
 .SH "SYNOPSIS"
@@ -268,7 +268,7 @@
 
 .SH "BUGS"
 
-As of March 2012 (version 0.8.3), \fBcgdisk\fR should be considered
+As of March 2012 (version 0.8.4), \fBcgdisk\fR should be considered
 beta software. Although the underlying partition manipulation code is much
 older, the \fBcgdisk\fR ncurses user interface is brand new with GPT fdisk
 version 0.8.0. Known bugs and limitations include:
diff --git a/current.spec b/current.spec
index 42af3fb..643692e 100644
--- a/current.spec
+++ b/current.spec
@@ -1,11 +1,11 @@
 Summary: GPT partitioning and MBR repair software
 Name: gptfdisk
-Version: 0.8.3
+Version: 0.8.4
 Release: 1%{?dist}
 License: GPLv2
 URL: http://www.rodsbooks.com/gdisk
 Group: Applications/System
-Source: http://www.rodsbooks.com/gdisk/gptfdisk-0.8.3.tar.gz
+Source: http://www.rodsbooks.com/gdisk/gptfdisk-0.8.4.tar.gz
 BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 
 %description
@@ -80,5 +80,5 @@
 
 
 %changelog
-* Fri Mar 23 2012 R Smith <rodsmith@rodsbooks.com> - 0.8.3
-- Created spec file for 0.8.3 release
+* Sun Mar 25 2012 R Smith <rodsmith@rodsbooks.com> - 0.8.4
+- Created spec file for 0.8.4 release
diff --git a/diskio.h b/diskio.h
index 3102077..5947e7d 100644
--- a/diskio.h
+++ b/diskio.h
@@ -74,6 +74,6 @@
       string GetName(void) const {return realFilename;}
 
       uint64_t DiskSize(int* err);
-}; // struct GPTPart
+}; // class DiskIO
 
 #endif
diff --git a/fixparts.8 b/fixparts.8
index 5aa5328..fc25df4 100644
--- a/fixparts.8
+++ b/fixparts.8
@@ -1,6 +1,6 @@
 .\" Copyright 2011, 2012 Roderick W. Smith (rodsmith@rodsbooks.com)
 .\" May be distributed under the GNU General Public License
-.TH "FIXPARTS" "8" "0.8.3" "Roderick W. Smith" "FixParts Manual"
+.TH "FIXPARTS" "8" "0.8.4" "Roderick W. Smith" "FixParts Manual"
 .SH "NAME"
 fixparts \- MBR partition table repair utility
 .SH "SYNOPSIS"
@@ -202,7 +202,7 @@
 .PP 
 
 .SH "BUGS"
-As of March 2012 (version 0.8.3), \fBfixparts\fR
+As of March 2012 (version 0.8.4), \fBfixparts\fR
 should be considered beta software. Known bugs and limitations include:
 
 .TP 
diff --git a/gdisk.8 b/gdisk.8
index 1447af1..140a6b3 100644
--- a/gdisk.8
+++ b/gdisk.8
@@ -1,6 +1,6 @@
 .\" Copyright 2011, 2012 Roderick W. Smith (rodsmith@rodsbooks.com)
 .\" May be distributed under the GNU General Public License
-.TH "GDISK" "8" "0.8.3" "Roderick W. Smith" "GPT fdisk Manual"
+.TH "GDISK" "8" "0.8.4" "Roderick W. Smith" "GPT fdisk Manual"
 .SH "NAME"
 gdisk \- Interactive GUID partition table (GPT) manipulator
 .SH "SYNOPSIS"
@@ -561,7 +561,7 @@
 usually bypasses the prompt entirely.
 
 .SH "BUGS"
-As of March 2012 (version 0.8.3), \fBgdisk\fR
+As of March 2012 (version 0.8.4), \fBgdisk\fR
 should be considered beta software. Known bugs and limitations include:
 
 .TP 
diff --git a/gpttext.cc b/gpttext.cc
index 2f30356..506c0f1 100644
--- a/gpttext.cc
+++ b/gpttext.cc
@@ -25,6 +25,7 @@
 #include <stdint.h>
 #include <limits.h>
 #include <iostream>
+#include <fstream>
 #include <sstream>
 #include <cstdio>
 #include "attributes.h"
@@ -509,12 +510,12 @@
    int goOn = 1;
    PartType typeHelper;
    uint32_t temp1, temp2;
-   
+
    do {
       cout << "\nCommand (? for help): ";
       switch (ReadString()[0]) {
          case '\0':
-            goOn = !cin.eof();
+            goOn = cin.good();
             break;
          case 'b': case 'B':
             cout << "Enter backup filename to save: ";
@@ -610,7 +611,7 @@
       cout << "\nRecovery/transformation command (? for help): ";
       switch (ReadString()[0]) {
          case '\0':
-            goOn = !cin.eof();
+            goOn = cin.good();
             break;
          case 'b': case 'B':
             RebuildMainHeader();
@@ -736,6 +737,7 @@
       cout << "\nExpert command (? for help): ";
       switch (ReadString()[0]) {
          case '\0':
+            goOn = cin.good();
             break;
          case 'a': case 'A':
             if (GetPartRange(&temp1, &temp2) > 0)
diff --git a/sgdisk.8 b/sgdisk.8
index ac2879f..d9ae7e8 100644
--- a/sgdisk.8
+++ b/sgdisk.8
@@ -1,6 +1,6 @@
 .\" Copyright 2011, 2012 Roderick W. Smith (rodsmith@rodsbooks.com)
 .\" May be distributed under the GNU General Public License
-.TH "SGDISK" "8" "0.8.3" "Roderick W. Smith" "GPT fdisk Manual"
+.TH "SGDISK" "8" "0.8.4" "Roderick W. Smith" "GPT fdisk Manual"
 .SH "NAME"
 sgdisk \- Command\-line GUID partition table (GPT) manipulator for Linux and Unix
 .SH "SYNOPSIS"
@@ -481,11 +481,16 @@
 An error prevented saving changes
 
 .TP
+.B 5
+An error occurred while reading standard input (should never occur with
+sgdisk, but may with gdisk)
+
+.TP
 .B 8
 Disk replication operation (-R) failed
 
 .SH "BUGS"
-As of March 2012 (version 0.8.3), \fBsgdisk\fR
+As of March 2012 (version 0.8.4), \fBsgdisk\fR
 should be considered beta software. Known bugs and limitations include:
 
 .TP 
diff --git a/support.cc b/support.cc
index 0a311a6..9e1c799 100644
--- a/support.cc
+++ b/support.cc
@@ -38,8 +38,8 @@
    string inString;
 
    getline(cin, inString);
-   if (!cin)
-      cin.clear();
+   if (!cin.good())
+      exit(5);
    return inString;
 } // ReadString()
 
@@ -56,6 +56,8 @@
       do {
          cout << prompt;
          cin.getline(line, 255);
+         if (!cin.good())
+            exit(5);
          num = sscanf(line, "%d", &response);
          if (num == 1) { // user provided a response
             if ((response < low) || (response > high))
@@ -100,6 +102,8 @@
    do {
       cout << prompt;
       cin.getline(line, 255);
+      if (!cin.good())
+         exit(5);
       response = IeeeToInt(line, sSize, low, high, def);
    } while ((response < low) || (response > high));
    return response;
diff --git a/support.h b/support.h
index 934908c..cbf8c32 100644
--- a/support.h
+++ b/support.h
@@ -8,7 +8,7 @@
 #ifndef __GPTSUPPORT
 #define __GPTSUPPORT
 
-#define GPTFDISK_VERSION "0.8.3"
+#define GPTFDISK_VERSION "0.8.4"
 
 #if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__APPLE__)
 // Darwin (Mac OS) & FreeBSD: disk IOCTLs are different, and there is no lseek64