]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: add list() label operation
authorKarel Zak <kzak@redhat.com>
Tue, 30 Apr 2013 09:57:30 +0000 (11:57 +0200)
committerKarel Zak <kzak@redhat.com>
Mon, 16 Sep 2013 14:46:53 +0000 (16:46 +0200)
... and use it for GPT

Signed-off-by: Karel Zak <kzak@redhat.com>
fdisks/fdisk.c
libfdisk/src/fdiskP.h
libfdisk/src/gpt.c
libfdisk/src/label.c
libfdisk/src/libfdisk.h

index 33049da1823dc15229ef6e3d14ae4d536b63292c..3da40b6a986d5e8ab85945b59d73dd3642755017 100644 (file)
@@ -668,18 +668,14 @@ static void list_table(struct fdisk_context *cxt, int xtra)
 
        list_disk_geometry(cxt);
 
-       if (fdisk_is_disklabel(cxt, GPT)) {
-               gpt_list_table(cxt, xtra);
-               return;
-       }
-
-       if (fdisk_is_disklabel(cxt, OSF)) {
+       if (fdisk_is_disklabel(cxt, OSF))
                xbsd_print_disklabel(cxt, xtra);
-               return;
-       }
 
-       if (fdisk_is_disklabel(cxt, DOS))
+       else if (fdisk_is_disklabel(cxt, DOS))
                dos_list_table(cxt, xtra);
+       else
+               fdisk_list_disklabel(cxt);
+
 }
 
 static void verify(struct fdisk_context *cxt)
index 01b9ec6f423a87b1d58efb7022fea34fd5e991be..c4d61b6c56a7d5904f070302074579c87f976fc7 100644 (file)
@@ -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,
index bceb09b0524c05164b3e292ad39f0a286e1184a8..5a434e9465fe69fd85902db81a9b43bd95de41ed 100644 (file)
@@ -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,
index cc21f759ecaf3ec9766f3df346daf320a6ca2357..d518d876decfe15fe5244bda34debf0bd8e7662d 100644 (file)
@@ -98,6 +98,24 @@ int fdisk_verify_disklabel(struct fdisk_context *cxt)
        return cxt->label->op->verify(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
index c3e6ad582dc10d5a6b05ddcd230c6c0b85b1506b..343eece81f5fb218a21afe40c8f3cdd220e23876 100644 (file)
@@ -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);