summarylogtreecommitdiffstats
path: root/0001-fdisk-fix-l-device.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-fdisk-fix-l-device.patch')
-rw-r--r--0001-fdisk-fix-l-device.patch61
1 files changed, 61 insertions, 0 deletions
diff --git a/0001-fdisk-fix-l-device.patch b/0001-fdisk-fix-l-device.patch
new file mode 100644
index 000000000000..ed0e748e3dd6
--- /dev/null
+++ b/0001-fdisk-fix-l-device.patch
@@ -0,0 +1,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
+