Fix Ctrl+D problems; 0.8.4 release

This commit is contained in:
srs5694
2012-03-25 16:13:16 -04:00
parent 3488294d71
commit a6297b8a2c
11 changed files with 40 additions and 20 deletions

9
NEWS
View File

@@ -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):
------------------

View File

@@ -1532,7 +1532,7 @@ int BasicMBRData::DoMenu(const string& prompt) {
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;

View File

@@ -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 @@ Write data. Use this command to save your changes.
.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:

View File

@@ -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 @@ provides a few additional partition manipulation features.
%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

View File

@@ -74,6 +74,6 @@ class DiskIO {
string GetName(void) const {return realFilename;}
uint64_t DiskSize(int* err);
}; // struct GPTPart
}; // class DiskIO
#endif

View File

@@ -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 @@ see a summary of available options.
.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

View File

@@ -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 @@ entering data. When only one option is possible, \fBgdisk\fR
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

View File

@@ -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 @@ void GPTDataTextUI::MainMenu(string filename) {
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 @@ void GPTDataTextUI::RecoveryMenu(string filename) {
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 @@ void GPTDataTextUI::ExpertsMenu(string filename) {
cout << "\nExpert command (? for help): ";
switch (ReadString()[0]) {
case '\0':
goOn = cin.good();
break;
case 'a': case 'A':
if (GetPartRange(&temp1, &temp2) > 0)

View File

@@ -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"
@@ -480,12 +480,17 @@ Non\-GPT disk detected and no \fI\-g\fR option
.B 4
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

View File

@@ -38,8 +38,8 @@ string ReadString(void) {
string inString;
getline(cin, inString);
if (!cin)
cin.clear();
if (!cin.good())
exit(5);
return inString;
} // ReadString()
@@ -56,6 +56,8 @@ int GetNumber(int low, int high, int def, const string & prompt) {
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 @@ uint64_t GetSectorNum(uint64_t low, uint64_t high, uint64_t def, uint64_t sSize,
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;

View File

@@ -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