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
|