fdisk_ask_yesno_set_result(ask, rpmatch(buf));
DBG(ASK, dbgprint("yes-no ask: reply '%s' [rc=%d]", buf, rc));
break;
- case FDISK_ASKTYPE_TABLE:
- fputc('\n', stdout);
- tt_print_table(fdisk_ask_get_table(ask));
- break;
case FDISK_ASKTYPE_STRING:
{
char prmt[BUFSIZ];
MENU_ENT('c', N_("toggle the dos compatibility flag")),
MENU_XENT('b', N_("move beginning of data in a partition")),
- MENU_XENT('e', N_("list extended partitions")),
MENU_XENT('f', N_("fix partition order")),
MENU_XENT('i', N_("change the disk identifier")),
switch (ent->key) {
case 'p':
list_disk_geometry(cxt);
- rc = fdisk_list_disklabel(cxt);
+ list_disklabel(cxt);
break;
case 'w':
rc = fdisk_write_disklabel(cxt);
rc = fdisk_dos_move_begin(cxt, n);
break;
}
- case 'e':
- rc = fdisk_dos_list_extended(cxt);
- break;
case 'f':
rc = fdisk_dos_fix_order(cxt);
break;
org = fdisk_context_display_details(cxt);
fdisk_context_enable_details(cxt, 1);
- fdisk_list_disklabel(cxt);
+ list_disklabel(cxt);
fdisk_context_enable_details(cxt, org);
break;
case 'x':
fdisk_colon(cxt, _("Disk identifier: %s"), id);
}
+void list_disklabel(struct fdisk_context *cxt)
+{
+ struct fdisk_table *tb = NULL;
+ char *str;
+
+ /* print label specific stuff by libfdisk FDISK_ASK_INFO API */
+ fdisk_list_disklabel(cxt);
+
+ /* print partitions */
+ if (fdisk_get_table(cxt, &tb))
+ return;
+ if (fdisk_table_to_string(tb, cxt, NULL, 0, &str) == 0) {
+ fputc('\n', stdout);
+ fputs(str, stdout);
+ }
+ fdisk_unref_table(tb);
+}
+
static size_t skip_empty(const unsigned char *buf, size_t i, size_t sz)
{
size_t next;
list_disk_geometry(cxt);
if (fdisk_dev_has_disklabel(cxt))
- fdisk_list_disklabel(cxt);
+ list_disklabel(cxt);
fputc('\n', stdout);
}
extern void list_partition_types(struct fdisk_context *cxt);
extern void list_disk_geometry(struct fdisk_context *cxt);
+extern void list_disklabel(struct fdisk_context *cxt);
extern void change_partition_type(struct fdisk_context *cxt);
extern struct fdisk_parttype *ask_partition_type(struct fdisk_context *cxt);
return 0;
}
-struct tt *fdisk_ask_get_table(struct fdisk_ask *ask)
-{
- assert(ask);
- assert(fdisk_is_ask(ask, TABLE));
- return ask->data.table;
-}
-
-int fdisk_print_table(struct fdisk_context *cxt, struct tt *tb)
-{
- struct fdisk_ask *ask;
- int rc;
-
- assert(cxt);
- assert(tb);
-
- ask = fdisk_new_ask();
- if (!ask)
- return -ENOMEM;
-
- fdisk_ask_set_type(ask, FDISK_ASKTYPE_TABLE);
- ask->data.table = tb;
-
- rc = fdisk_do_ask(cxt, ask);
-
- fdisk_free_ask(ask);
- return rc;
-}
-
#define is_print_ask(a) (fdisk_is_ask(a, WARN) || fdisk_is_ask(a, WARNX) || fdisk_is_ask(a, INFO))
int fdisk_ask_print_get_errno(struct fdisk_ask *ask)
#include "libfdisk.h"
#include "nls.h" /* temporary before dialog API will be implamented */
-#include "tt.h"
#include "list.h"
+#include "tt.h"
/* features */
#define CONFIG_LIBFDISK_ASSERT
struct ask_string {
char *result; /* allocated */
} str;
- /* FDISK_ASKTYPE_TABLE, see include/tt.h */
- struct tt *table;
} data;
};
/* ask.c */
extern int fdisk_ask_partnum(struct fdisk_context *cxt, size_t *partnum, int wantnew);
-extern struct tt *fdisk_ask_get_table(struct fdisk_ask *ask);
-extern int fdisk_print_table(struct fdisk_context *cxt, struct tt *tb);
-
extern int fdisk_info_new_partition(
struct fdisk_context *cxt,
int num, sector_t start, sector_t stop,
FDISK_ASKTYPE_WARNX,
FDISK_ASKTYPE_INFO,
FDISK_ASKTYPE_YESNO,
- FDISK_ASKTYPE_TABLE,
FDISK_ASKTYPE_STRING
};