summarylogtreecommitdiffstats
path: root/0001-fdisk-fix-l-device.patch
blob: ed0e748e3dd6e083146764798ad143de4cbb33f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
From 52d92543ffb8efb56036f316a1072d8fbba62c38 Mon Sep 17 00:00:00 2001
From: Karel Zak <kzak@redhat.com>
Date: Mon, 28 Jul 2014 11:57:10 +0200
Subject: [PATCH] fdisk: fix -l [<device>]

 * don't use err(), but warn(), so don't stop after the first error

 * display all errors when "-l <device> ..." specified

 * display only EACCES errors when list whole disks from
   /proc/partitions ("fdisk -l" )

Reported-by: Boian Bonev <bbonev@ipacct.com>
Addresses: https://github.com/karelzak/util-linux/pull/106
Signed-off-by: Karel Zak <kzak@redhat.com>
---
 disk-utils/fdisk.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/disk-utils/fdisk.c b/disk-utils/fdisk.c
index 8d57dbb..46e632a 100644
--- a/disk-utils/fdisk.c
+++ b/disk-utils/fdisk.c
@@ -670,10 +670,13 @@ static int is_ide_cdrom_or_tape(char *device)
 	return ret;
 }
 
-static void print_device_pt(struct fdisk_context *cxt, char *device)
+static void print_device_pt(struct fdisk_context *cxt, char *device, int warnme)
 {
-	if (fdisk_context_assign_device(cxt, device, 1) != 0)	/* read-only */
-		err(EXIT_FAILURE, _("cannot open %s"), device);
+	if (fdisk_context_assign_device(cxt, device, 1) != 0) {	/* read-only */
+		if (warnme || errno == EACCES)
+			warn(_("cannot open %s"), device);
+		return;
+	}
 
 	list_disk_geometry(cxt);
 
@@ -717,7 +720,7 @@ static void print_all_devices_pt(struct fdisk_context *cxt)
 		if (!cn)
 			continue;
 		if (!is_ide_cdrom_or_tape(cn))
-			print_device_pt(cxt, cn);
+			print_device_pt(cxt, cn, 0);
 		free(cn);
 	}
 	fclose(f);
@@ -912,7 +915,7 @@ int main(int argc, char **argv)
 		if (argc > optind) {
 			int k;
 			for (k = optind; k < argc; k++)
-				print_device_pt(cxt, argv[k]);
+				print_device_pt(cxt, argv[k], 1);
 		} else
 			print_all_devices_pt(cxt);
 		break;
-- 
2.0.3