[PATCH 1/2] fdisk: quit with a single CTRL-D, confirm if necessary

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Francesco Cosoleto <cosoleto@xxxxxxxxx>
---
 fdisk/fdisk.c |   35 ++++++++++++++++++++++++++---------
 1 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/fdisk/fdisk.c b/fdisk/fdisk.c
index 5a69437..e1221aa 100644
--- a/fdisk/fdisk.c
+++ b/fdisk/fdisk.c
@@ -1316,21 +1316,38 @@ got_dos_table:
 	return 0;
 }
 
+static int is_partition_table_changed(void)
+{
+	int i;
+
+	for (i = 0; i < partitions; i++)
+		if (ptes[i].changed)
+			return 1;
+	return 0;
+}
+
+static void maybe_exit(int rc)
+{
+	char line[LINE_LENGTH];
+
+	putchar('\n');
+
+	if (is_partition_table_changed() || MBRbuffer_changed) {
+		fprintf(stderr, _("Do you really want to quit? "));
+
+		if (!fgets(line, LINE_LENGTH, stdin) || rpmatch(line) == 1)
+			exit(rc);
+	} else
+		exit(rc);
+}
+
 /* read line; return 0 or first char */
 int
 read_line(void)
 {
-	static int got_eof = 0;
-
 	line_ptr = line_buffer;
 	if (!fgets(line_buffer, LINE_LENGTH, stdin)) {
-		if (feof(stdin))
-			got_eof++; 	/* user typed ^D ? */
-		if (got_eof >= 3) {
-			fflush(stdout);
-			fprintf(stderr, _("\ngot EOF thrice - exiting..\n"));
-			exit(1);
-		}
+		maybe_exit(1);
 		return 0;
 	}
 	while (*line_ptr && !isgraph(*line_ptr))
-- 
1.7.1

--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux