diff options
Diffstat (limited to 'libfdisk')
-rw-r--r-- | libfdisk/src/fdiskP.h | 3 | ||||
-rw-r--r-- | libfdisk/src/gpt.c | 12 | ||||
-rw-r--r-- | libfdisk/src/label.c | 18 | ||||
-rw-r--r-- | libfdisk/src/libfdisk.h | 1 |
4 files changed, 30 insertions, 4 deletions
diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h index 01b9ec6f4..c4d61b6c5 100644 --- a/libfdisk/src/fdiskP.h +++ b/libfdisk/src/fdiskP.h @@ -145,6 +145,9 @@ struct fdisk_label_operations { int (*verify)(struct fdisk_context *cxt); /* create new disk label */ int (*create)(struct fdisk_context *cxt); + /* list partition table */ + int (*list)(struct fdisk_context *cxt); + /* new partition */ int (*part_add)(struct fdisk_context *cxt, size_t partnum, diff --git a/libfdisk/src/gpt.c b/libfdisk/src/gpt.c index bceb09b05..5a434e946 100644 --- a/libfdisk/src/gpt.c +++ b/libfdisk/src/gpt.c @@ -1137,9 +1137,9 @@ static char *encode_to_utf8(unsigned char *src, size_t count) * requirements, but once partition semantics are added to the fdisk * API it can be removed for custom implementation (see gpt_label struct). */ -void gpt_list_table(struct fdisk_context *cxt, - int xtra __attribute__ ((__unused__))) +static int gpt_list_disklabel(struct fdisk_context *cxt) { + int rc; uint32_t i; struct fdisk_gpt_label *gpt; uint64_t fu; @@ -1156,7 +1156,8 @@ void gpt_list_table(struct fdisk_context *cxt, tb = tt_new_table(TT_FL_FREEDATA); if (!tb) - return; /* ENOMEM */ + return -ENOMEM; + tt_define_column(tb, "#", 2, TT_FL_RIGHT); tt_define_column(tb, "Start", 12, TT_FL_RIGHT); tt_define_column(tb, "End", 12, TT_FL_RIGHT); @@ -1203,8 +1204,10 @@ void gpt_list_table(struct fdisk_context *cxt, fdisk_free_parttype(t); } - fdisk_print_table(cxt, tb); + rc = fdisk_print_table(cxt, tb); tt_free_table(tb); + + return rc; } /* @@ -1856,6 +1859,7 @@ static const struct fdisk_label_operations gpt_operations = .write = gpt_write_disklabel, .verify = gpt_verify_disklabel, .create = gpt_create_disklabel, + .list = gpt_list_disklabel, .part_add = gpt_add_partition, .part_delete = gpt_delete_partition, .part_get_type = gpt_get_partition_type, diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c index cc21f759e..d518d876d 100644 --- a/libfdisk/src/label.c +++ b/libfdisk/src/label.c @@ -99,6 +99,24 @@ int fdisk_verify_disklabel(struct fdisk_context *cxt) } /** + * fdisk_list_disklabel: + * @cxt: fdisk context + * + * Lists in-memory partition table + * + * Returns 0 on success, otherwise, a corresponding error. + */ +int fdisk_list_disklabel(struct fdisk_context *cxt) +{ + if (!cxt || !cxt->label) + return -EINVAL; + if (!cxt->label->op->list) + return -ENOSYS; + + return cxt->label->op->list(cxt); +} + +/** * fdisk_add_partition: * @cxt: fdisk context * @t: partition type to create or NULL for label-specific default diff --git a/libfdisk/src/libfdisk.h b/libfdisk/src/libfdisk.h index c3e6ad582..343eece81 100644 --- a/libfdisk/src/libfdisk.h +++ b/libfdisk/src/libfdisk.h @@ -112,6 +112,7 @@ extern int fdisk_dev_is_disklabel(struct fdisk_context *cxt, enum fdisk_labeltyp extern int fdisk_write_disklabel(struct fdisk_context *cxt); extern int fdisk_verify_disklabel(struct fdisk_context *cxt); extern int fdisk_create_disklabel(struct fdisk_context *cxt, const char *name); +extern int fdisk_list_disklabel(struct fdisk_context *cxt); extern int fdisk_add_partition(struct fdisk_context *cxt, struct fdisk_parttype *t); extern int fdisk_delete_partition(struct fdisk_context *cxt, size_t partnum); |