summaryrefslogtreecommitdiffstats
path: root/fdisk/fdisk.c
diff options
context:
space:
mode:
authorDavidlohr Bueso2012-04-27 13:23:51 +0200
committerKarel Zak2012-05-02 09:33:46 +0200
commit34574201787722fecf12c37f33aad026ea2e5d9e (patch)
treed1435be629980a117543777a3c9d2e894c0f704d /fdisk/fdisk.c
parentfdisk: remove listing variable (diff)
downloadkernel-qcow2-util-linux-34574201787722fecf12c37f33aad026ea2e5d9e.tar.gz
kernel-qcow2-util-linux-34574201787722fecf12c37f33aad026ea2e5d9e.tar.xz
kernel-qcow2-util-linux-34574201787722fecf12c37f33aad026ea2e5d9e.zip
fdisk: rework fatal errors
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>
Diffstat (limited to 'fdisk/fdisk.c')
-rw-r--r--fdisk/fdisk.c18
1 files changed, 6 insertions, 12 deletions
diff --git a/fdisk/fdisk.c b/fdisk/fdisk.c
index f49efd0b3..a16b6723e 100644
--- a/fdisk/fdisk.c
+++ b/fdisk/fdisk.c
@@ -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);