]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
fdisk: fix -l [<device>]
authorKarel Zak <kzak@redhat.com>
Mon, 28 Jul 2014 09:57:10 +0000 (11:57 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 28 Jul 2014 10:07:32 +0000 (12:07 +0200)
 * 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

index 8d57dbb17c1c7a66be360ddf0a6ceeb9affb866e..46e632aa3c09dfacf06aabb6ddabd937970c201e 100644 (file)
@@ -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;