summaryrefslogtreecommitdiffstats
path: root/fdisks/fdisk-menu.c
diff options
context:
space:
mode:
authorKarel Zak2013-05-22 15:37:47 +0200
committerKarel Zak2013-09-16 16:46:56 +0200
commit8e40a677bdbe466d44c613ecdc3589635e28b4a7 (patch)
tree7fa024c432ed0103dec6c053e67469da00cba80b /fdisks/fdisk-menu.c
parentfdisk: move geometry commands to separate menu (diff)
downloadkernel-qcow2-util-linux-8e40a677bdbe466d44c613ecdc3589635e28b4a7.tar.gz
kernel-qcow2-util-linux-8e40a677bdbe466d44c613ecdc3589635e28b4a7.tar.xz
kernel-qcow2-util-linux-8e40a677bdbe466d44c613ecdc3589635e28b4a7.zip
fdisk: add functions to geometry menu
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'fdisks/fdisk-menu.c')
-rw-r--r--fdisks/fdisk-menu.c43
1 files changed, 39 insertions, 4 deletions
diff --git a/fdisks/fdisk-menu.c b/fdisks/fdisk-menu.c
index 99141a78d..369f83fa7 100644
--- a/fdisks/fdisk-menu.c
+++ b/fdisks/fdisk-menu.c
@@ -38,10 +38,13 @@ struct menu_context {
};
#define MENU_CXT_EMPTY { 0, 0 }
+#define DECLARE_MENU_CB(x) \
+ static int x(struct fdisk_context *, \
+ const struct menu *, \
+ const struct menu_entry *)
-static int gpt_menu_cb(struct fdisk_context *cxt,
- const struct menu *menu,
- const struct menu_entry *ent);
+DECLARE_MENU_CB(gpt_menu_cb);
+DECLARE_MENU_CB(geo_menu_cb);
/*
* Menu entry macros:
@@ -113,7 +116,7 @@ struct menu menu_createlabel = {
};
struct menu menu_geo = {
-/* .callback = geo_menu_cb, */
+ .callback = geo_menu_cb,
.exclude = FDISK_DISKLABEL_GPT,
.entries = {
MENU_XSEP(N_("Geometry")),
@@ -366,6 +369,7 @@ int process_fdisk_menu(struct fdisk_context *cxt)
return key;
}
+
/*
* This is fdisk frontend for GPT specific libfdisk functions that
* are not expported by generic libfdisk API.
@@ -398,6 +402,37 @@ static int gpt_menu_cb(struct fdisk_context *cxt,
return rc;
}
+/* C/H/S commands */
+static int geo_menu_cb(struct fdisk_context *cxt,
+ const struct menu *menu __attribute__((__unused__)),
+ const struct menu_entry *ent)
+{
+ int rc = -EINVAL;
+ uintmax_t c = 0, h = 0, s = 0;
+
+ assert(cxt);
+ assert(ent);
+
+ switch (ent->key) {
+ case 'c':
+ rc = fdisk_ask_number(cxt, 1, cxt->geom.cylinders,
+ 1048576, _("Number of cylinders"), &c);
+ break;
+ case 'h':
+ rc = fdisk_ask_number(cxt, 1, cxt->geom.heads,
+ 256, _("Number of heads"), &h);
+ break;
+ case 's':
+ rc = fdisk_ask_number(cxt, 1, cxt->geom.sectors,
+ 63, _("Number of sectors"), &s);
+ break;
+ }
+
+ if (!rc)
+ fdisk_override_geometry(cxt, c, h, s);
+ return rc;
+}
+
#ifdef TEST_PROGRAM
struct fdisk_label *fdisk_new_dos_label(struct fdisk_context *cxt) { return NULL; }
struct fdisk_label *fdisk_new_bsd_label(struct fdisk_context *cxt) { return NULL; }