summaryrefslogtreecommitdiffstats
path: root/fdisks/fdiskbsdlabel.c
diff options
context:
space:
mode:
authorKarel Zak2013-06-12 12:28:43 +0200
committerKarel Zak2013-09-16 16:47:00 +0200
commit6a0b468fee5fed23a6482d9c77015247201beaaa (patch)
tree13fda0a95fb94eeb37925155cc2d2a0e12d5391d /fdisks/fdiskbsdlabel.c
parentfdisk: (bsd) cleanup label initialization (diff)
downloadkernel-qcow2-util-linux-6a0b468fee5fed23a6482d9c77015247201beaaa.tar.gz
kernel-qcow2-util-linux-6a0b468fee5fed23a6482d9c77015247201beaaa.tar.xz
kernel-qcow2-util-linux-6a0b468fee5fed23a6482d9c77015247201beaaa.zip
fdisk: (bsd) use libfdisk to ask for label setting
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'fdisks/fdiskbsdlabel.c')
-rw-r--r--fdisks/fdiskbsdlabel.c93
1 files changed, 57 insertions, 36 deletions
diff --git a/fdisks/fdiskbsdlabel.c b/fdisks/fdiskbsdlabel.c
index 8431ebb06..f4a0b1d02 100644
--- a/fdisks/fdiskbsdlabel.c
+++ b/fdisks/fdiskbsdlabel.c
@@ -327,8 +327,21 @@ bsd_command_prompt (struct fdisk_context *cxt)
#endif
while (1) {
+ char buf[16];
+ int rc;
+
+ /*
+ * BIG-FAT-TODO: don't use bsd_command_prompt(), just initialialize BSD
+ * stuff by label probe() libfdisk function, and use standard fdisk.c
+ * menu code.
+ */
putchar ('\n');
- switch (tolower (read_char(cxt, _("BSD disklabel command (m for help): ")))) {
+ rc = get_user_reply(cxt, _("BSD disklabel command (m for help): "),
+ buf, sizeof(buf));
+ if (rc)
+ return;
+
+ switch (tolower(buf[0])) {
case 'd':
xbsd_delete_part(cxt, xbsd_get_part_index(cxt, xbsd_dlabel.d_npartitions));
break;
@@ -491,51 +504,59 @@ xbsd_print_disklabel (struct fdisk_context *cxt, int show_all)
}
}
-static unsigned long
-edit_int(struct fdisk_context *cxt, unsigned long def, char *mesg)
+static uint32_t ask_uint32(struct fdisk_context *cxt,
+ uint32_t dflt, char *mesg)
{
- do {
- fputs (mesg, stdout);
- printf (" (%lu): ", def);
- if (!read_line(cxt, NULL))
- return def;
- } while (!isdigit (*line_ptr));
-
- return strtoul(line_ptr, NULL, 10); /* TODO check it! */
+ uintmax_t res;
+
+ if (fdisk_ask_number(cxt, min(dflt, (uint32_t) 1), dflt,
+ UINT32_MAX, mesg, &res) == 0)
+ return res;
+ return dflt;
}
-static void
-xbsd_edit_disklabel(struct fdisk_context *cxt)
+static uint16_t ask_uint16(struct fdisk_context *cxt,
+ uint16_t dflt, char *mesg)
+{
+ uintmax_t res;
+
+ if (fdisk_ask_number(cxt, min(dflt, (uint16_t) 1),
+ dflt, UINT16_MAX, mesg, &res) == 0)
+ return res;
+ return dflt;
+}
+
+static void xbsd_edit_disklabel(struct fdisk_context *cxt)
{
- struct xbsd_disklabel *d;
+ struct xbsd_disklabel *d;
+ uintmax_t res;
- d = &xbsd_dlabel;
+ d = &xbsd_dlabel;
#if defined (__alpha__) || defined (__ia64__)
- d -> d_secsize = edit_int(cxt, d->d_secsize ,_("bytes/sector"));
- d -> d_nsectors = edit_int(cxt, d->d_nsectors ,_("sectors/track"));
- d -> d_ntracks = edit_int(cxt, d->d_ntracks ,_("tracks/cylinder"));
- d -> d_ncylinders = edit_int(cxt, d->d_ncylinders ,_("cylinders"));
+ if (fdisk_ask_number(cxt, DEFAULT_SECTOR_SIZE, d->d_secsize,
+ UINT32_MAX, _("bytes/sector"), &res) == 0)
+ d->d_secsize = res;
+
+ d->d_nsectors = ask_uint32(cxt, d->d_nsectors, _("sectors/track"));
+ d->d_ntracks = ask_uint32(cxt, d->d_ntracks, _("tracks/cylinder"));
+ d->d_ncylinders = ask_uint32(cxt, d->d_ncylinders ,_("cylinders"));
#endif
- /* d -> d_secpercyl can be != d -> d_nsectors * d -> d_ntracks */
- while (1)
- {
- d -> d_secpercyl = edit_int(cxt, (unsigned long) d->d_nsectors * d -> d_ntracks,
- _("sectors/cylinder"));
- if (d -> d_secpercyl <= d -> d_nsectors * d -> d_ntracks)
- break;
+ if (fdisk_ask_number(cxt, 1, d->d_nsectors * d->d_ntracks,
+ d->d_nsectors * d->d_ntracks,
+ _("sectors/cylinder"), &res) == 0)
+ d->d_secpercyl = res;
- printf (_("Must be <= sectors/track * tracks/cylinder (default).\n"));
- }
- d -> d_rpm = (unsigned short) edit_int(cxt, d->d_rpm ,_("rpm"));
- d -> d_interleave = (unsigned short) edit_int(cxt, d->d_interleave,_("interleave"));
- d -> d_trackskew = (unsigned short) edit_int(cxt, d->d_trackskew ,_("trackskew"));
- d -> d_cylskew = (unsigned short) edit_int(cxt, d->d_cylskew ,_("cylinderskew"));
- d -> d_headswitch = edit_int(cxt, d->d_headswitch ,_("headswitch"));
- d -> d_trkseek = edit_int(cxt, d->d_trkseek ,_("track-to-track seek"));
-
- d -> d_secperunit = d -> d_secpercyl * d -> d_ncylinders;
+ d->d_rpm = ask_uint16(cxt, d->d_rpm, _("rpm"));
+ d->d_interleave = ask_uint16(cxt, d->d_interleave, _("interleave"));
+ d->d_trackskew = ask_uint16(cxt, d->d_trackskew, _("trackskew"));
+ d->d_cylskew = ask_uint16(cxt, d->d_cylskew, _("cylinderskew"));
+
+ d->d_headswitch = ask_uint32(cxt, d->d_headswitch, _("headswitch"));
+ d->d_trkseek = ask_uint32(cxt, d->d_trkseek, _("track-to-track seek"));
+
+ d->d_secperunit = d->d_secpercyl * d->d_ncylinders;
}
static int