diff options
author | Karel Zak | 2013-02-11 10:59:43 +0100 |
---|---|---|
committer | Karel Zak | 2013-03-11 13:00:56 +0100 |
commit | 9ff2ce0a54615efb667fdcde90b04f4a9c185579 (patch) | |
tree | e986ab3b34048429f7ebe4b9bf06ed6fb0916ae9 /fdisks/fdisksunlabel.c | |
parent | fdisk: sort menu (diff) | |
download | kernel-qcow2-util-linux-9ff2ce0a54615efb667fdcde90b04f4a9c185579.tar.gz kernel-qcow2-util-linux-9ff2ce0a54615efb667fdcde90b04f4a9c185579.tar.xz kernel-qcow2-util-linux-9ff2ce0a54615efb667fdcde90b04f4a9c185579.zip |
fdisk: (sun) use Ask API for new-partiton dialog
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'fdisks/fdisksunlabel.c')
-rw-r--r-- | fdisks/fdisksunlabel.c | 81 |
1 files changed, 64 insertions, 17 deletions
diff --git a/fdisks/fdisksunlabel.c b/fdisks/fdisksunlabel.c index 3f949ea06..bdaa62d7e 100644 --- a/fdisks/fdisksunlabel.c +++ b/fdisks/fdisksunlabel.c @@ -461,6 +461,8 @@ static int sun_add_partition( struct sun_info *info = &sunlabel->vtoc.infos[n]; uint32_t start, stop, stop2; int whole_disk = 0, sys = t ? t->type : SUN_TAG_LINUX_NATIVE; + struct fdisk_ask *ask; + int rc; char mesg[256]; size_t i; @@ -485,11 +487,29 @@ static int sun_add_partition( } snprintf(mesg, sizeof(mesg), _("First %s"), str_units(SINGULAR)); for (;;) { - if (whole_disk) - first = read_int(cxt, 0, 0, 0, 0, mesg); - else - first = read_int(cxt, scround(start), scround(stop)+1, - scround(stop), 0, mesg); + ask = fdisk_new_ask(); + if (!ask) + return -ENOMEM; + + fdisk_ask_set_query(ask, mesg); + fdisk_ask_set_type(ask, FDISK_ASKTYPE_NUMBER); + + if (whole_disk) { + fdisk_ask_number_set_low(ask, 0); /* minimal */ + fdisk_ask_number_set_default(ask, 0); /* default */ + fdisk_ask_number_set_high(ask, 0); /* maximal */ + } else { + fdisk_ask_number_set_low(ask, scround(start)); /* minimal */ + fdisk_ask_number_set_default(ask, scround(start)); /* default */ + fdisk_ask_number_set_high(ask, scround(stop)); /* maximal */ + } + rc = fdisk_do_ask(cxt, ask); + first = fdisk_ask_number_get_result(ask); + fdisk_free_ask(ask); + + if (rc) + return rc; + if (display_in_cyl_units) first *= units_per_sector; else { @@ -540,19 +560,46 @@ and is of type `Whole disk'")); stop = starts[i]; } snprintf(mesg, sizeof(mesg), - _("Last %s or +size or +sizeM or +sizeK"), - str_units(SINGULAR)); - if (whole_disk) - last = read_int(cxt, scround(stop2), scround(stop2), scround(stop2), - 0, mesg); - else if (n == 2 && !first) - last = read_int(cxt, scround(first), scround(stop2), scround(stop2), - scround(first), mesg); - else - last = read_int(cxt, scround(first), scround(stop), scround(stop), - scround(first), mesg); + _("Last %s or +%s or +size{K,M,G,T,P}"), + str_units(SINGULAR), str_units(PLURAL)); + + ask = fdisk_new_ask(); + if (!ask) + return -ENOMEM; + + fdisk_ask_set_query(ask, mesg); + fdisk_ask_set_type(ask, FDISK_ASKTYPE_OFFSET); + + if (whole_disk) { + fdisk_ask_number_set_low(ask, scround(stop2)); /* minimal */ + fdisk_ask_number_set_default(ask, scround(stop2)); /* default */ + fdisk_ask_number_set_high(ask, scround(stop2)); /* maximal */ + fdisk_ask_number_set_base(ask, 0); + } else if (n == 2 && !first) { + fdisk_ask_number_set_low(ask, scround(first)); /* minimal */ + fdisk_ask_number_set_default(ask, scround(stop2)); /* default */ + fdisk_ask_number_set_high(ask, scround(stop2)); /* maximal */ + fdisk_ask_number_set_base(ask, scround(first)); + } else { + fdisk_ask_number_set_low(ask, scround(first)); /* minimal */ + fdisk_ask_number_set_default(ask, scround(stop)); /* default */ + fdisk_ask_number_set_high(ask, scround(stop)); /* maximal */ + fdisk_ask_number_set_base(ask, scround(first)); + } + if (display_in_cyl_units) - last *= units_per_sector; + fdisk_ask_number_set_unit(ask, + cxt->sector_size * units_per_sector); + else + fdisk_ask_number_set_unit(ask, cxt->sector_size); + + rc = fdisk_do_ask(cxt, ask); + last = fdisk_ask_number_get_result(ask); + + fdisk_free_ask(ask); + if (rc) + return rc; + if (n == 2 && !first) { if (last >= stop2) { whole_disk = 1; |