]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
fdisk: rework fatal errors
authorDavidlohr Bueso <dave@gnu.org>
Fri, 27 Apr 2012 11:23:51 +0000 (13:23 +0200)
committerKarel Zak <kzak@redhat.com>
Wed, 2 May 2012 07:33:46 +0000 (09:33 +0200)
When the device cannot be opened, there's no point calling fatal() when we can
just use err(3). When any other kind of fatal error occurs it's Ok, in addition
we can also go ahead and close the descriptor before exiting the program as
it's currently leaking.

Signed-off-by: Davidlohr Bueso <dave@gnu.org>
fdisk/fdisk.c
fdisk/fdisk.h

index f49efd0b37b88da195ca8a3a9e53524728cb7e36..a16b6723ebb561dcf805d88481a9f04fdfcf7e26 100644 (file)
@@ -264,10 +264,8 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out)
 
 void fatal(enum failure why)
 {
+       close(fd);
        switch (why) {
-               case unable_to_open:
-                       err(EXIT_FAILURE, _("unable to open %s"), disk_device);
-
                case unable_to_read:
                        err(EXIT_FAILURE, _("unable to read %s"), disk_device);
 
@@ -1087,18 +1085,14 @@ static int get_boot(int try_only) {
        disklabel = ANY_LABEL;
        memset(MBRbuffer, 0, 512);
 
-       if (try_only && (fd = open(disk_device, O_RDONLY)) < 0) {
-               fprintf(stderr, _("Cannot open %s\n"), disk_device);
-               fatal(unable_to_open);
-       }
+       if (try_only && (fd = open(disk_device, O_RDONLY)) < 0)
+               err(EXIT_FAILURE, _("unable to open %s"), disk_device);
        else {
                if ((fd = open(disk_device, O_RDWR)) < 0) {
                        /* ok, can we read-only the device? */
                        if ((fd = open(disk_device, O_RDONLY)) < 0)
-                               fatal(unable_to_open);
-                       else
-                               printf(_("You will not be able to write "
-                                        "the partition table.\n"));
+                               err(EXIT_FAILURE, _("unable to open %s"), disk_device);
+                       printf(_("You will not be able to write the partition table.\n"));
                }
        }
 
@@ -2958,7 +2952,7 @@ main(int argc, char **argv) {
                for (j = optind; j < argc; j++) {
                        disk_device = argv[j];
                        if ((fd = open(disk_device, O_RDONLY)) < 0)
-                               fatal(unable_to_open);
+                               err(EXIT_FAILURE, _("unable to open %s"), disk_device);
                        if (blkdev_get_sectors(fd, &size) == -1)
                                fatal(ioctl_error);
                        close(fd);
index 01e3d7239efe75fb21b8e79ced6652dcd6ba1b23..3c5110107dd16392c952673989f891a3885f7cf9 100644 (file)
@@ -44,9 +44,12 @@ enum menutype {
        EXPERT_MENU,
 };
 
-enum failure {ioctl_error,
-       unable_to_open, unable_to_read, unable_to_seek,
-       unable_to_write};
+enum failure {
+       ioctl_error,
+       unable_to_read,
+       unable_to_seek,
+       unable_to_write
+};
 
 struct geom {
        unsigned int heads;