aboutsummaryrefslogtreecommitdiff
path: root/sbin/fdisk/fdisk.c
diff options
context:
space:
mode:
Diffstat (limited to 'sbin/fdisk/fdisk.c')
-rw-r--r--sbin/fdisk/fdisk.c48
1 files changed, 10 insertions, 38 deletions
diff --git a/sbin/fdisk/fdisk.c b/sbin/fdisk/fdisk.c
index 3e4ef3cba3f3..a9afd50ed441 100644
--- a/sbin/fdisk/fdisk.c
+++ b/sbin/fdisk/fdisk.c
@@ -47,6 +47,8 @@ __FBSDID("$FreeBSD$");
#include <string.h>
#include <unistd.h>
+#include "fdisk_mbr_enc.h"
+
static int iotest;
#define NO_DISK_SECTORS ((u_int32_t)-1)
@@ -786,47 +788,17 @@ geom_class_available(const char *name)
static int
write_disk(off_t sector, void *buf)
{
- struct gctl_req *grq;
- const char *errmsg;
- char *pname;
- int error;
-
- /* Check that GEOM_MBR is available */
- if (geom_class_available("MBR") != 0) {
- grq = gctl_get_handle();
- gctl_ro_param(grq, "verb", -1, "write MBR");
- gctl_ro_param(grq, "class", -1, "MBR");
- pname = g_providername(fd);
- if (pname == NULL) {
- warn("Error getting providername for %s", disk);
- return (-1);
- }
- gctl_ro_param(grq, "geom", -1, pname);
- gctl_ro_param(grq, "data", secsize, buf);
- errmsg = gctl_issue(grq);
- free(pname);
- if (errmsg == NULL) {
- gctl_free(grq);
- return(0);
- }
- if (!q_flag)
- warnx("GEOM_MBR: %s", errmsg);
- gctl_free(grq);
- } else {
- /*
- * Try to write MBR directly. This may help when disk
- * is not in use.
- * XXX: hardcoded sectorsize
- */
- error = pwrite(fd, buf, secsize, (sector * 512));
- if (error == secsize)
- return (0);
- }
+ ssize_t wr;
/*
- * GEOM_MBR is not available or failed to write MBR.
- * Now check that we have GEOM_PART and recommend to use gpart (8).
+ * Try to write MBR directly. This may help when disk
+ * is not in use.
+ * XXX: hardcoded sectorsize
*/
+ wr = pwrite(fd, buf, secsize, (sector * 512));
+ if (wr == secsize)
+ return (0);
+
if (geom_class_available("PART") != 0)
warnx("Failed to write MBR. Try to use gpart(8).");
else