diff options
author | Karel Zak | 2013-07-11 18:03:54 +0200 |
---|---|---|
committer | Karel Zak | 2013-09-16 16:47:08 +0200 |
commit | 5e860870181a60bd72ca78e8b992f0b6d717df98 (patch) | |
tree | 736ea0754e39d8af1cc83a3d4cfc1fe5fdee5de4 /fdisks/fdisk.c | |
parent | libfdisk: cleanup SGI functions names (diff) | |
download | kernel-qcow2-util-linux-5e860870181a60bd72ca78e8b992f0b6d717df98.tar.gz kernel-qcow2-util-linux-5e860870181a60bd72ca78e8b992f0b6d717df98.tar.xz kernel-qcow2-util-linux-5e860870181a60bd72ca78e8b992f0b6d717df98.zip |
fdisk: consolidate code in fdisk.c
Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'fdisks/fdisk.c')
-rw-r--r-- | fdisks/fdisk.c | 114 |
1 files changed, 36 insertions, 78 deletions
diff --git a/fdisks/fdisk.c b/fdisks/fdisk.c index 172e9ce45..25eab3bf3 100644 --- a/fdisks/fdisk.c +++ b/fdisks/fdisk.c @@ -68,17 +68,6 @@ static void __attribute__ ((__noreturn__)) usage(FILE *out) exit(out == stderr ? EXIT_FAILURE : EXIT_SUCCESS); } -void toggle_units(struct fdisk_context *cxt) -{ - fdisk_context_set_unit(cxt, - fdisk_context_use_cylinders(cxt) ? "sectors" : - "cylinders"); - if (fdisk_context_use_cylinders(cxt)) - fdisk_info(cxt, _("Changing display/entry units to cylinders (DEPRECATED!).")); - else - fdisk_info(cxt, _("Changing display/entry units to sectors.")); -} - void list_partition_types(struct fdisk_context *cxt) { struct fdisk_parttype *types; @@ -167,17 +156,6 @@ void toggle_dos_compatibility_flag(struct fdisk_context *cxt) fdisk_reset_alignment(cxt); } -static void delete_partition(struct fdisk_context *cxt, int partnum) -{ - if (partnum < 0) - return; - - if (fdisk_delete_partition(cxt, partnum) != 0) - printf(_("Could not delete partition %d\n"), partnum + 1); - else - printf(_("Partition %d is deleted\n"), partnum + 1); -} - static void change_partition_type(struct fdisk_context *cxt) { size_t i; @@ -254,25 +232,6 @@ static void list_disk_geometry(struct fdisk_context *cxt) printf("\n"); } -static void list_table(struct fdisk_context *cxt) -{ - list_disk_geometry(cxt); - fdisk_list_disklabel(cxt); -} - -static void verify(struct fdisk_context *cxt) -{ - fdisk_verify_disklabel(cxt); -} - -static void new_partition(struct fdisk_context *cxt) -{ - assert(cxt); - assert(cxt->label); - - fdisk_add_partition(cxt, NULL); -} - static void write_table(struct fdisk_context *cxt) { int rc; @@ -358,13 +317,6 @@ static void print_raw(struct fdisk_context *cxt) /* TODO: print also EBR (extended partition) buffer */ } -static void __attribute__ ((__noreturn__)) handle_quit(struct fdisk_context *cxt) -{ - fdisk_free_context(cxt); - printf("\n"); - exit(EXIT_SUCCESS); -} - static void expert_command_prompt(struct fdisk_context *cxt) { @@ -389,15 +341,18 @@ expert_command_prompt(struct fdisk_context *cxt) print_raw(cxt); break; case 'p': - list_table(cxt); + list_disk_geometry(cxt); + fdisk_list_disklabel(cxt); break; case 'q': - handle_quit(cxt); + fdisk_free_context(cxt); + printf("\n"); + exit(EXIT_SUCCESS); case 'r': fdisk_context_enable_details(cxt, 0); return; case 'v': - verify(cxt); + fdisk_verify_disklabel(cxt); break; case 'w': write_table(cxt); @@ -426,10 +381,10 @@ static void print_partition_table_from_option( if (fdisk_context_assign_device(cxt, device, 1) != 0) /* read-only */ err(EXIT_FAILURE, _("cannot open %s"), device); + list_disk_geometry(cxt); + if (fdisk_dev_has_disklabel(cxt)) - list_table(cxt); - else - list_disk_geometry(cxt); + fdisk_list_disklabel(cxt); } /* @@ -467,23 +422,9 @@ print_all_partition_table_from_option(struct fdisk_context *cxt) fclose(procpt); } -static void -unknown_command(int c) { - printf(_("%c: unknown command\n"), c); -} - -static void print_welcome(void) -{ - printf(_("Welcome to fdisk (%s).\n\n" - "Changes will remain in memory only, until you decide to write them.\n" - "Be careful before using the write command.\n\n"), PACKAGE_STRING); - - fflush(stdout); -} - static void command_prompt(struct fdisk_context *cxt) { - int c; + int c, rc = -EINVAL; size_t n; assert(cxt); @@ -500,28 +441,42 @@ static void command_prompt(struct fdisk_context *cxt) * perform the commands here */ switch (c) { case 'd': - if (fdisk_ask_partnum(cxt, &n, FALSE) == 0) - delete_partition(cxt, n); + rc = fdisk_ask_partnum(cxt, &n, FALSE); + if (!rc) + rc = fdisk_delete_partition(cxt, n); + if (rc) + fdisk_warnx(cxt, _("Could not delete partition %d"), n + 1); + else + fdisk_info(cxt, _("Partition %d is deleted"), n + 1); break; case 'l': list_partition_types(cxt); break; case 'n': - new_partition(cxt); + rc = fdisk_add_partition(cxt, NULL); break; case 'p': - list_table(cxt); + list_disk_geometry(cxt); + fdisk_list_disklabel(cxt); break; case 'q': - handle_quit(cxt); + fdisk_free_context(cxt); + printf("\n"); + exit(EXIT_SUCCESS); case 't': change_partition_type(cxt); break; case 'u': - toggle_units(cxt); + fdisk_context_set_unit(cxt, + fdisk_context_use_cylinders(cxt) ? "sectors" : + "cylinders"); + if (fdisk_context_use_cylinders(cxt)) + fdisk_info(cxt, _("Changing display/entry units to cylinders (DEPRECATED!).")); + else + fdisk_info(cxt, _("Changing display/entry units to sectors.")); break; case 'v': - verify(cxt); + fdisk_verify_disklabel(cxt); break; case 'w': write_table(cxt); @@ -538,7 +493,7 @@ static void command_prompt(struct fdisk_context *cxt) } break; default: - unknown_command(c); + printf(_("%c: unknown command\n"), c); } } } @@ -683,7 +638,10 @@ int main(int argc, char **argv) if (fdisk_context_assign_device(cxt, argv[optind], 0) != 0) err(EXIT_FAILURE, _("cannot open %s"), argv[optind]); - print_welcome(); + printf(_("Welcome to fdisk (%s).\n\n" + "Changes will remain in memory only, until you decide to write them.\n" + "Be careful before using the write command.\n\n"), PACKAGE_STRING); + fflush(stdout); if (!fdisk_dev_has_disklabel(cxt)) { fprintf(stderr, |