summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavidlohr Bueso2012-04-23 13:07:16 +0200
committerKarel Zak2012-04-23 13:07:16 +0200
commit8d95e4ee613b98ccf5cf4cacef08f33f2b68c1dc (patch)
treee435df92aab4831c7b1fe9b073d6b01ddfabda47
parentfdisk: remove action enum (diff)
downloadkernel-qcow2-util-linux-8d95e4ee613b98ccf5cf4cacef08f33f2b68c1dc.tar.gz
kernel-qcow2-util-linux-8d95e4ee613b98ccf5cf4cacef08f33f2b68c1dc.tar.xz
kernel-qcow2-util-linux-8d95e4ee613b98ccf5cf4cacef08f33f2b68c1dc.zip
fdisk: simplify device opening
This patch makes fdisk open(2) the device in only one place (get_boot), instead of having to depend on user input (ie: listing -l). Signed-off-by: Davidlohr Bueso <dave@gnu.org>
-rw-r--r--fdisk/fdisk.c39
1 files changed, 16 insertions, 23 deletions
diff --git a/fdisk/fdisk.c b/fdisk/fdisk.c
index 81e9236e7..3c2c1419a 100644
--- a/fdisk/fdisk.c
+++ b/fdisk/fdisk.c
@@ -1096,13 +1096,18 @@ static int get_boot(int try_only) {
disklabel = ANY_LABEL;
memset(MBRbuffer, 0, 512);
- if (!try_only) {
+ if (try_only && (fd = open(disk_device, O_RDONLY)) < 0) {
+ fprintf(stderr, _("Cannot open %s\n"), disk_device);
+ fatal(unable_to_open);
+ }
+ 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"));
+ "the partition table.\n"));
}
}
@@ -1113,7 +1118,6 @@ static int get_boot(int try_only) {
}
get_geometry(fd, NULL);
-
update_units();
if (!check_dos_label())
@@ -2707,26 +2711,15 @@ print_partition_table_from_option(char *device)
if (setjmp(listingbuf))
return;
gpt_warning(device);
- if ((fd = open(disk_device, O_RDONLY)) >= 0) {
- gb = get_boot(1);
- if (gb > 0) { /* I/O error */
- } else if (gb < 0) { /* no DOS signature */
- list_disk_geometry();
- if (disklabel != AIX_LABEL && disklabel != MAC_LABEL)
- btrydev(device);
- } else {
- list_table(0);
- }
- close(fd);
- } else {
- /* Ignore other errors, since we try IDE
- and SCSI hard disks which may not be
- installed on the system. */
- if (errno == EACCES) {
- fprintf(stderr, _("Cannot open %s\n"), device);
- return;
- }
- }
+ gb = get_boot(1);
+ if (gb < 0) { /* no DOS signature */
+ list_disk_geometry();
+ if (disklabel != AIX_LABEL && disklabel != MAC_LABEL)
+ btrydev(device);
+ }
+ else if (!gb)
+ list_table(0);
+ close(fd);
}
/*