diff options
-rw-r--r-- | fdisks/fdisk-menu.c | 43 | ||||
-rw-r--r-- | fdisks/fdisk.c | 34 |
2 files changed, 41 insertions, 36 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; } diff --git a/fdisks/fdisk.c b/fdisks/fdisk.c index 09fa0746b..2ed6bcd17 100644 --- a/fdisks/fdisk.c +++ b/fdisks/fdisk.c @@ -58,7 +58,8 @@ char *line_ptr, /* interactive input */ int nowarn = 0; /* no warnings for fdisk -l/-s */ -unsigned int user_cylinders, user_heads, user_sectors; +/* when C/H/S specified on command line */ +static unsigned int user_cylinders, user_heads, user_sectors; void toggle_units(struct fdisk_context *cxt) { @@ -721,8 +722,6 @@ expert_command_prompt(struct fdisk_context *cxt) { char c; size_t n; - uintmax_t num; - int rc; assert(cxt); @@ -748,15 +747,6 @@ expert_command_prompt(struct fdisk_context *cxt) fdisk_ask_partnum(cxt, &n, FALSE) == 0) dos_move_begin(cxt, n); break; - case 'c': - rc = fdisk_ask_number(cxt, 1, cxt->geom.cylinders, - 1048576, _("Number of cylinders"), &num); - if (rc == 0) { - user_cylinders = num; - fdisk_override_geometry(cxt, user_cylinders, - user_heads, user_sectors); - } - break; case 'd': print_raw(cxt); break; @@ -778,14 +768,6 @@ expert_command_prompt(struct fdisk_context *cxt) * compatibility only. */ fdisk_create_disklabel(cxt, "sgi"); break; - case 'h': - rc = fdisk_ask_number(cxt, 1, cxt->geom.heads, - 256, _("Number of heads"), &num); - if (rc == 0) - user_heads = num; - fdisk_override_geometry(cxt, user_cylinders, - user_heads, user_sectors); - break; case 'i': if (fdisk_is_disklabel(cxt, SUN)) fdisk_sun_set_ilfact(cxt); @@ -804,18 +786,6 @@ expert_command_prompt(struct fdisk_context *cxt) case 'r': fdisk_context_enable_details(cxt, 0); return; - case 's': - rc = fdisk_ask_number(cxt, 1, cxt->geom.sectors, - 63, _("Number of sectors"), &num); - if (rc == 0) { - user_sectors = num; - if (is_dos_compatible(cxt)) - fdisk_warn(cxt, _("setting sector " - "offset for DOS compatibility")); - fdisk_override_geometry(cxt, user_cylinders, - user_heads, user_sectors); - } - break; case 'v': verify(cxt); break; |