]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libfdisk: add fdisk_label to driver API
authorKarel Zak <kzak@redhat.com>
Tue, 11 Dec 2012 17:04:25 +0000 (18:04 +0100)
committerKarel Zak <kzak@redhat.com>
Mon, 11 Mar 2013 11:47:29 +0000 (12:47 +0100)
Signed-off-by: Karel Zak <kzak@redhat.com>
fdisks/fdiskaixlabel.c
fdisks/fdiskbsdlabel.c
fdisks/fdiskdoslabel.c
fdisks/fdiskmaclabel.c
fdisks/fdisksgilabel.c
fdisks/fdisksunlabel.c
fdisks/gpt.c
libfdisk/src/alignment.c
libfdisk/src/context.c
libfdisk/src/fdiskP.h
libfdisk/src/label.c

index d5872243be236b0975a8a3e277665b42f9030f5b..01a425362f45811fc7af93f04b5f28c1b902f931 100644 (file)
@@ -56,7 +56,9 @@ static void aix_nolabel(struct fdisk_context *cxt)
     return;
 }
 
-static int aix_probe_label(struct fdisk_context *cxt)
+static int aix_probe_label(
+               struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
     struct aix_partition *aixlabel = (struct aix_partition *) cxt->firstsector;
 
@@ -76,6 +78,7 @@ static int aix_probe_label(struct fdisk_context *cxt)
 
 static int aix_add_partition(
                struct fdisk_context *cxt __attribute__((__unused__)),
+               struct fdisk_label *lb __attribute__((__unused__)),
                int partnum __attribute__((__unused__)),
                struct fdisk_parttype *t __attribute__((__unused__)))
 {
index ef2047a0a536cd5021a9c1f4fc87491783ebcc8f..4008e6bf52e777495e9f724e8c2310e5739d727d 100644 (file)
@@ -70,10 +70,11 @@ struct fdisk_bsd_label {
 };
 
 
-static int xbsd_delete_part (struct fdisk_context *cxt, int partnum);
+static int xbsd_delete_part (struct fdisk_context *cxt,
+                            struct fdisk_label *lb, int partnum);
 static void xbsd_edit_disklabel (void);
 static void xbsd_write_bootstrap (struct fdisk_context *cxt);
-static void xbsd_change_fstype (struct fdisk_context *cxt);
+static void xbsd_change_fstype (struct fdisk_context *cxt, struct fdisk_label *lb);
 static int xbsd_get_part_index (int max);
 static int xbsd_check_new_partition (int *i);
 static unsigned short xbsd_dkcksum (struct xbsd_disklabel *lp);
@@ -115,7 +116,9 @@ static struct xbsd_disklabel xbsd_dlabel;
  * so this does not mean that there is a BSD disk label.
  */
 static int
-osf_probe_label(struct fdisk_context *cxt) {
+osf_probe_label(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
+{
        if (xbsd_readlabel (cxt, NULL, &xbsd_dlabel) == 0)
                return 0;
        return 1;
@@ -145,7 +148,8 @@ is_bsd_partition_type(int type) {
 }
 #endif
 
-static int xbsd_write_disklabel (struct fdisk_context *cxt)
+static int xbsd_write_disklabel (struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
 #if defined (__alpha__)
        printf (_("Writing disklabel to %s.\n"), cxt->dev_path);
@@ -161,6 +165,7 @@ static int xbsd_write_disklabel (struct fdisk_context *cxt)
 }
 
 static int xbsd_add_part (struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
                int partnum __attribute__((__unused__)),
                struct fdisk_parttype *t __attribute__((__unused__)))
 {
@@ -202,7 +207,8 @@ static int xbsd_add_part (struct fdisk_context *cxt,
        return 0;
 }
 
-static int xbsd_create_disklabel (struct fdisk_context *cxt)
+static int xbsd_create_disklabel (struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        char c;
 
@@ -254,7 +260,7 @@ bsd_command_prompt (struct fdisk_context *cxt)
       printf (_("Reading disklabel of %s at sector %d.\n"),
              partname(cxt->dev_path, t+1, 0), ss + BSD_LABELSECTOR);
       if (xbsd_readlabel (cxt, xbsd_part, &xbsd_dlabel) == 0)
-       if (xbsd_create_disklabel (cxt) == 0)
+       if (xbsd_create_disklabel (cxt, cxt->label) == 0)
          return;
       break;
     }
@@ -277,7 +283,7 @@ bsd_command_prompt (struct fdisk_context *cxt)
     putchar ('\n');
     switch (tolower (read_char (_("BSD disklabel command (m for help): ")))) {
       case 'd':
-             xbsd_delete_part(cxt, xbsd_get_part_index(xbsd_dlabel.d_npartitions));
+             xbsd_delete_part(cxt, cxt->label, xbsd_get_part_index(xbsd_dlabel.d_npartitions));
              break;
       case 'e':
        xbsd_edit_disklabel ();
@@ -289,7 +295,7 @@ bsd_command_prompt (struct fdisk_context *cxt)
        list_partition_types (cxt);
        break;
       case 'n':
-             xbsd_add_part (cxt, 0, 0);
+             xbsd_add_part (cxt, cxt->label, 0, 0);
              break;
       case 'p':
              xbsd_print_disklabel (cxt, 0);
@@ -303,13 +309,13 @@ bsd_command_prompt (struct fdisk_context *cxt)
              xbsd_print_disklabel (cxt, 1);
        break;
       case 't':
-       xbsd_change_fstype (cxt);
+       xbsd_change_fstype (cxt, cxt->label);
        break;
       case 'u':
        change_units(cxt);
        break;
       case 'w':
-       xbsd_write_disklabel (cxt);
+       xbsd_write_disklabel (cxt, cxt->label);
        break;
 #if !defined (__alpha__)
       case 'x':
@@ -323,8 +329,10 @@ bsd_command_prompt (struct fdisk_context *cxt)
   }
 }
 
-static int xbsd_delete_part(struct fdisk_context *cxt __attribute__((__unused__)),
-                            int partnum)
+static int xbsd_delete_part(
+               struct fdisk_context *cxt __attribute__((__unused__)),
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int partnum)
 {
        xbsd_dlabel.d_partitions[partnum].p_size   = 0;
        xbsd_dlabel.d_partitions[partnum].p_offset = 0;
@@ -574,7 +582,9 @@ xbsd_write_bootstrap (struct fdisk_context *cxt)
 
 /* TODO: remove this, use regular change_partition_type() in fdisk.c */
 static void
-xbsd_change_fstype (struct fdisk_context *cxt)
+xbsd_change_fstype (
+               struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
   int i;
   struct fdisk_parttype *t;
@@ -858,7 +868,10 @@ alpha_bootblock_checksum (char *boot)
 }
 #endif /* __alpha__ */
 
-static struct fdisk_parttype *xbsd_get_parttype(struct fdisk_context *cxt, int n)
+static struct fdisk_parttype *xbsd_get_parttype(
+               struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int n)
 {
        struct fdisk_parttype *t;
 
@@ -871,8 +884,11 @@ static struct fdisk_parttype *xbsd_get_parttype(struct fdisk_context *cxt, int n
        return t;
 }
 
-static int xbsd_set_parttype(struct fdisk_context *cxt, int partnum,
-                           struct fdisk_parttype *t)
+static int xbsd_set_parttype(
+               struct fdisk_context *cxt __attribute__((__unused__)),
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int partnum,
+               struct fdisk_parttype *t)
 {
        struct xbsd_partition *p;
 
index 04f529422b38e68a6cdcdf90e845bcd75509e283..a6d6e2b35a895d373c424a4c7708f6dc67a80eee 100644 (file)
@@ -200,6 +200,7 @@ void dos_init(struct fdisk_context *cxt)
 
 static int dos_delete_partition(
                struct fdisk_context *cxt __attribute__ ((__unused__)),
+               struct fdisk_label *lb __attribute__ ((__unused__)),
                int partnum)
 {
        struct pte *pe = &ptes[partnum];
@@ -345,7 +346,7 @@ static void read_extended(struct fdisk_context *cxt, int ext)
                if (!get_nr_sects(pe->part_table) &&
                    (partitions > 5 || ptes[4].part_table->sys_ind)) {
                        printf(_("omitting empty partition (%d)\n"), i+1);
-                       dos_delete_partition(cxt, i);
+                       dos_delete_partition(cxt, cxt->label, i);
                        goto remove;    /* numbering changed */
                }
        }
@@ -356,7 +357,8 @@ void dos_print_mbr_id(struct fdisk_context *cxt)
        printf(_("Disk identifier: 0x%08x\n"), mbr_get_id(cxt->firstsector));
 }
 
-static int dos_create_disklabel(struct fdisk_context *cxt)
+static int dos_create_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        unsigned int id;
 
@@ -431,7 +433,8 @@ static void get_partition_table_geometry(struct fdisk_context *cxt,
        DBG(CONTEXT, dbgprint("DOS PT geometry: heads=%u, sectors=%u", *ph, *ps));
 }
 
-static int dos_reset_alignment(struct fdisk_context *cxt)
+static int dos_reset_alignment(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        /* overwrite necessary stuff by DOS deprecated stuff */
        if (is_dos_compatible(cxt)) {
@@ -446,7 +449,8 @@ static int dos_reset_alignment(struct fdisk_context *cxt)
        return 0;
 }
 
-static int dos_probe_label(struct fdisk_context *cxt)
+static int dos_probe_label(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        int i;
        unsigned int h = 0, s = 0;
@@ -720,7 +724,8 @@ static int add_logical(struct fdisk_context *cxt)
        return add_partition(cxt, partitions - 1, NULL);
 }
 
-static int dos_verify_disklabel(struct fdisk_context *cxt)
+static int dos_verify_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        int i, j;
        sector_t total = 1, n_sectors = cxt->total_sectors;
@@ -792,6 +797,7 @@ static int dos_verify_disklabel(struct fdisk_context *cxt)
  */
 static int dos_add_partition(
                        struct fdisk_context *cxt,
+                       struct fdisk_label *lb __attribute__((__unused__)),
                        int partnum __attribute__ ((__unused__)),
                        struct fdisk_parttype *t)
 {
@@ -872,7 +878,8 @@ static int write_sector(struct fdisk_context *cxt, sector_t secno,
        return 0;
 }
 
-static int dos_write_disklabel(struct fdisk_context *cxt)
+static int dos_write_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        int i, rc = 0;
 
@@ -904,7 +911,10 @@ done:
        return rc;
 }
 
-static struct fdisk_parttype *dos_get_parttype(struct fdisk_context *cxt, int partnum)
+static struct fdisk_parttype *dos_get_parttype(
+               struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int partnum)
 {
        struct fdisk_parttype *t;
        struct partition *p;
@@ -919,8 +929,11 @@ static struct fdisk_parttype *dos_get_parttype(struct fdisk_context *cxt, int pa
        return t;
 }
 
-static int dos_set_parttype(struct fdisk_context *cxt, int partnum,
-                           struct fdisk_parttype *t)
+static int dos_set_parttype(
+               struct fdisk_context *cxt __attribute__((__unused__)),
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int partnum,
+               struct fdisk_parttype *t)
 {
        struct partition *p;
 
index f15b802cce0eb8abc22370d45310b4dafc310d9f..fe989caabcf0d29693fb9568d1afe3fb149e43d5 100644 (file)
@@ -57,7 +57,8 @@ mac_nolabel(struct fdisk_context *cxt)
 }
 
 static int
-mac_probe_label(struct fdisk_context *cxt)
+mac_probe_label(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        struct mac_partition *maclabel = (struct mac_partition *) cxt->firstsector;
 
@@ -92,9 +93,10 @@ IS_MAC:
 }
 
 static int mac_add_partition(
-                       struct fdisk_context *cxt __attribute__ ((__unused__)),
-                       int partnum __attribute__ ((__unused__)),
-                       struct fdisk_parttype *t __attribute__ ((__unused__)))
+               struct fdisk_context *cxt __attribute__ ((__unused__)),
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int partnum __attribute__ ((__unused__)),
+               struct fdisk_parttype *t __attribute__ ((__unused__)))
 {
        printf(_("\tSorry - this fdisk cannot handle Mac disk labels."
                 "\n\tIf you want to add DOS-type partitions, create"
index c58e7263be2490edba59dc06fe4d529a9d1c0f5a..fa9e592ff86f327de18b3835d31b360974bfddab 100644 (file)
@@ -140,7 +140,9 @@ two_s_complement_32bit_sum(unsigned int *base, int size /* in bytes */) {
 }
 
 static int
-sgi_probe_label(struct fdisk_context *cxt) {
+sgi_probe_label(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
+{
        if (sizeof(sgilabel) > 512) {
                fprintf(stderr,
                        _("According to MIPS Computer Systems, Inc the "
@@ -342,7 +344,8 @@ create_sgiinfo(struct fdisk_context *cxt) {
 }
 
 
-static int sgi_write_disklabel(struct fdisk_context *cxt)
+static int sgi_write_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        sgiinfo *info = NULL;
 
@@ -451,7 +454,8 @@ static void sort(void *base0, size_t num, size_t size, struct fdisk_context *cxt
        }
 }
 
-static int sgi_verify_disklabel(struct fdisk_context *cxt)
+static int sgi_verify_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        int Index[16];          /* list of valid partitions */
        int sortcount = 0;      /* number of used partitions, i.e. non-zero lengths */
@@ -583,7 +587,7 @@ sgi_gaps(struct fdisk_context *cxt) {
         *  < 0 : there is an overlap
         *  > 0 : there is still some vacant space
         */
-       return sgi_verify_disklabel(cxt);
+       return sgi_verify_disklabel(cxt, cxt->label);
 }
 
 
@@ -645,13 +649,17 @@ sgi_set_volhdr(struct fdisk_context *cxt)
        }
 }
 
-static int sgi_delete_partition(struct fdisk_context *cxt, int partnum)
+static int sgi_delete_partition(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int partnum)
 {
        return sgi_set_partition(cxt, partnum, 0, 0, 0);
 }
 
-static int sgi_add_partition(struct fdisk_context *cxt, int n,
-                            struct fdisk_parttype *t)
+static int sgi_add_partition(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int n,
+               struct fdisk_parttype *t)
 {
        char mesg[256];
        unsigned int first=0, last=0;
@@ -723,7 +731,8 @@ static int sgi_add_partition(struct fdisk_context *cxt, int n,
        return 0;
 }
 
-static int sgi_create_disklabel(struct fdisk_context *cxt)
+static int sgi_create_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        struct hd_geometry geometry;
        struct {
@@ -894,7 +903,9 @@ static sgiinfo *fill_sgiinfo(void)
        return info;
 }
 
-static struct fdisk_parttype *sgi_get_parttype(struct fdisk_context *cxt, int n)
+static struct fdisk_parttype *sgi_get_parttype(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int n)
 {
        struct fdisk_parttype *t;
 
@@ -907,8 +918,10 @@ static struct fdisk_parttype *sgi_get_parttype(struct fdisk_context *cxt, int n)
        return t;
 }
 
-static int sgi_set_parttype(struct fdisk_context *cxt, int i,
-                           struct fdisk_parttype *t)
+static int sgi_set_parttype(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int i,
+               struct fdisk_parttype *t)
 {
        if (i >= partitions || !t || t->type > UINT32_MAX)
                return -EINVAL;
index 77d660168251abea7729042dc3480e2a77cef721..28942e4086ae69b4c1e5e624fe2505be0048b8d0 100644 (file)
@@ -87,7 +87,8 @@ static void init(struct fdisk_context *cxt)
        partitions = SUN_NUM_PARTITIONS;
 }
 
-static int sun_probe_label(struct fdisk_context *cxt)
+static int sun_probe_label(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        unsigned short *ush;
        int csum;
@@ -152,7 +153,8 @@ static int sun_probe_label(struct fdisk_context *cxt)
        return 1;
 }
 
-static int sun_create_disklabel(struct fdisk_context *cxt)
+static int sun_create_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        struct hd_geometry geometry;
        sector_t llsectors, llcyls;
@@ -303,7 +305,8 @@ static int verify_sun_cmp(int *a, int *b)
     return -1;
 }
 
-static int sun_verify_disklabel(struct fdisk_context *cxt)
+static int sun_verify_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
     uint32_t starts[SUN_NUM_PARTITIONS], lens[SUN_NUM_PARTITIONS], start, stop;
     uint32_t i,j,k,starto,endo;
@@ -372,8 +375,11 @@ static int sun_verify_disklabel(struct fdisk_context *cxt)
     return 0;
 }
 
-static int sun_add_partition(struct fdisk_context *cxt, int n,
-                            struct fdisk_parttype *t)
+static int sun_add_partition(
+               struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int n,
+               struct fdisk_parttype *t)
 {
        uint32_t starts[SUN_NUM_PARTITIONS], lens[SUN_NUM_PARTITIONS];
        struct sun_partition *part = &sunlabel->partitions[n];
@@ -495,7 +501,9 @@ and is of type `Whole disk'\n"));
        return 0;
 }
 
-static int sun_delete_partition(struct fdisk_context *cxt, int partnum)
+static int sun_delete_partition(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int partnum)
 {
        struct sun_partition *part = &sunlabel->partitions[partnum];
        struct sun_tag_flag *tag = &sunlabel->part_tags[partnum];
@@ -612,7 +620,8 @@ void sun_set_pcylcount(struct fdisk_context *cxt)
                                 _("Number of physical cylinders")));
 }
 
-static int sun_write_disklabel(struct fdisk_context *cxt)
+static int sun_write_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        unsigned short *ush = (unsigned short *)sunlabel;
        unsigned short csum = 0;
@@ -628,7 +637,10 @@ static int sun_write_disklabel(struct fdisk_context *cxt)
        return 0;
 }
 
-static struct fdisk_parttype *sun_get_parttype(struct fdisk_context *cxt, int n)
+static struct fdisk_parttype *sun_get_parttype(
+               struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int n)
 {
        struct fdisk_parttype *t;
 
@@ -641,8 +653,11 @@ static struct fdisk_parttype *sun_get_parttype(struct fdisk_context *cxt, int n)
        return t;
 }
 
-static int sun_set_parttype(struct fdisk_context *cxt, int i,
-                           struct fdisk_parttype *t)
+static int sun_set_parttype(
+               struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int i,
+               struct fdisk_parttype *t)
 {
        struct sun_partition *part;
        struct sun_tag_flag *tag;
@@ -685,7 +700,8 @@ static int sun_set_parttype(struct fdisk_context *cxt, int i,
 }
 
 
-static int sun_reset_alignment(struct fdisk_context *cxt)
+static int sun_reset_alignment(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        /* this is shared with DOS ... */
        update_units(cxt);
index f9ba9f07246a39af89d083215dd11a054c7649f6..0dd8ebe13d66b4fab045e58fd3209a8d706be2c3 100644 (file)
@@ -1012,7 +1012,8 @@ static void gpt_init(struct fdisk_context *cxt)
 }
 
 
-static int gpt_probe_label(struct fdisk_context *cxt)
+static int gpt_probe_label(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        int mbr_type;
 
@@ -1239,7 +1240,8 @@ fail:
  * Returns 0 if successful write, otherwise, a corresponding error.
  * Any indication of error will abort the operation.
  */
-static int gpt_write_disklabel(struct fdisk_context *cxt)
+static int gpt_write_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        if (!cxt)
                goto err0;
@@ -1297,7 +1299,8 @@ err1:
  *   - primary and backup header validations
  *   - paritition validations
  */
-static int gpt_verify_disklabel(struct fdisk_context *cxt)
+static int gpt_verify_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        int nerror = 0, ptnum;
 
@@ -1394,7 +1397,9 @@ static int gpt_verify_disklabel(struct fdisk_context *cxt)
 }
 
 /* Delete a single GPT partition, specified by partnum. */
-static int gpt_delete_partition(struct fdisk_context *cxt, int partnum)
+static int gpt_delete_partition(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int partnum)
 {
        if (!cxt || partition_unused(&ents[partnum]) || partnum < 0)
                return -EINVAL;
@@ -1478,8 +1483,11 @@ static int gpt_create_new_partition(int partnum, uint64_t fsect, uint64_t lsect,
 }
 
 /* Performs logical checks to add a new partition entry */
-static int gpt_add_partition(struct fdisk_context *cxt, int partnum,
-                            struct fdisk_parttype *t)
+static int gpt_add_partition(
+               struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int partnum,
+               struct fdisk_parttype *t)
 {
        uint64_t user_f, user_l;        /* user input ranges for first and last sectors */
        uint64_t disk_f, disk_l;        /* first and last available sector ranges on device*/
@@ -1563,7 +1571,8 @@ static int gpt_add_partition(struct fdisk_context *cxt, int partnum,
 /*
  * Create a new GPT disklabel - destroys any previous data.
  */
-static int gpt_create_disklabel(struct fdisk_context *cxt)
+static int gpt_create_disklabel(struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)))
 {
        int rc = 0;
        ssize_t entry_sz = 0;
@@ -1612,8 +1621,10 @@ done:
        return rc;
 }
 
-static struct fdisk_parttype *gpt_get_partition_type(struct fdisk_context *cxt,
-                                                    int i)
+static struct fdisk_parttype *gpt_get_partition_type(
+               struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int i)
 {
        struct fdisk_parttype *t;
        struct gpt_guid uuid;
@@ -1634,8 +1645,11 @@ static struct fdisk_parttype *gpt_get_partition_type(struct fdisk_context *cxt,
 }
 
 
-static int gpt_set_partition_type(struct fdisk_context *cxt, int i,
-                                 struct fdisk_parttype *t)
+static int gpt_set_partition_type(
+               struct fdisk_context *cxt,
+               struct fdisk_label *lb __attribute__((__unused__)),
+               int i,
+               struct fdisk_parttype *t)
 {
        struct gpt_guid uuid;
 
@@ -1652,7 +1666,7 @@ static int gpt_set_partition_type(struct fdisk_context *cxt, int i,
 /*
  * Deinitialize fdisk-specific variables
  */
-static void gpt_deinit(struct fdisk_label *lb)
+static void gpt_deinit(struct fdisk_label *lb __attribute__((unused)))
 {
        free(ents);
        free(pheader);
@@ -1661,10 +1675,6 @@ static void gpt_deinit(struct fdisk_label *lb)
        ents = NULL;
        pheader = NULL;
        bheader = NULL;
-
-       if (lb->cxt && lb->cxt->disklabel == FDISK_DISKLABEL_GPT)
-               lb->cxt->disklabel = FDISK_DISKLABEL_ANY;
-
        partitions = 0;
 }
 
index 25323d1b54e252c2dc77b1d39b6ee4416007a179..a89182172ad05b667f41a1b14d77c30e3dffe09b 100644 (file)
@@ -369,7 +369,7 @@ int fdisk_reset_alignment(struct fdisk_context *cxt)
 
        /* overwrite default by label stuff */
        if (cxt->label && cxt->label->op->reset_alignment)
-               rc = cxt->label->op->reset_alignment(cxt);
+               rc = cxt->label->op->reset_alignment(cxt, cxt->label);
 
        DBG(LABEL, dbgprint("%s alignment reseted to: "
                            "first LBA=%ju, grain=%lu [rc=%d]",
index 6eaa927b0e5af184f7419a3f1dcfed422ea74422..4adc7cf302b3ee05d59edb6814e01dfb3a01ccd3 100644 (file)
@@ -4,7 +4,6 @@
 struct fdisk_context *fdisk_new_context(void)
 {
        struct fdisk_context *cxt;
-       size_t i;
 
        cxt = calloc(1, sizeof(*cxt));
        if (!cxt)
@@ -27,12 +26,6 @@ struct fdisk_context *fdisk_new_context(void)
        cxt->labels[ cxt->nlabels++ ] = fdisk_new_sgi_label(cxt);
        cxt->labels[ cxt->nlabels++ ] = fdisk_new_sun_label(cxt);
 
-       DBG(CONTEXT, dbgprint("supported labels:"));
-       for (i = 0; i < cxt->nlabels; i++) {
-               DBG(CONTEXT, dbgprint(" %s", cxt->labels[i]->name));
-               cxt->labels[i]->cxt = cxt;
-       }
-
        return cxt;
 }
 
index 144717d660906e7295e64a9245cd46dfaaae6c80..00fc0cd5407d27f6c15879c7f6638e122f15c1de 100644 (file)
@@ -123,23 +123,31 @@ struct fdisk_geometry {
  */
 struct fdisk_label_operations {
        /* probe disk label */
-       int (*probe)(struct fdisk_context *cxt);
+       int (*probe)(struct fdisk_context *cxt, struct fdisk_label *lb);
        /* write in-memory changes to disk */
-       int (*write)(struct fdisk_context *cxt);
+       int (*write)(struct fdisk_context *cxt, struct fdisk_label *lb);
        /* verify the partition table */
-       int (*verify)(struct fdisk_context *cxt);
+       int (*verify)(struct fdisk_context *cxt, struct fdisk_label *lb);
        /* create new disk label */
-       int (*create)(struct fdisk_context *cxt);
+       int (*create)(struct fdisk_context *cxt, struct fdisk_label *lb);
        /* new partition */
-       int (*part_add)(struct fdisk_context *cxt, int partnum, struct fdisk_parttype *t);
+       int (*part_add)(struct fdisk_context *cxt, struct fdisk_label *lb,
+                                               int partnum,
+                                               struct fdisk_parttype *t);
        /* delete partition */
-       int (*part_delete)(struct fdisk_context *cxt, int partnum);
+       int (*part_delete)(struct fdisk_context *cxt, struct fdisk_label *lb,
+                                               int partnum);
        /* get partition type */
-       struct fdisk_parttype *(*part_get_type)(struct fdisk_context *cxt, int partnum);
+       struct fdisk_parttype *(*part_get_type)(struct fdisk_context *cxt,
+                                               struct fdisk_label *lb,
+                                               int partnum);
        /* set partition type */
-       int (*part_set_type)(struct fdisk_context *cxt, int partnum, struct fdisk_parttype *t);
+       int (*part_set_type)(struct fdisk_context *cxt, struct fdisk_label *lb,
+                                               int partnum,
+                                               struct fdisk_parttype *t);
        /* refresh alignment setting */
-       int (*reset_alignment)(struct fdisk_context *cxt);
+       int (*reset_alignment)(struct fdisk_context *cxt,
+                                               struct fdisk_label *lb);
 
        /* free in-memory label stuff */
        void (*free)(struct fdisk_label *lb);
@@ -155,7 +163,6 @@ struct fdisk_label {
        const char              *name;
        struct fdisk_parttype   *parttypes;
        size_t                  nparttypes;     /* number of items in parttypes[] */
-       struct fdisk_context    *cxt;
 
        const struct fdisk_label_operations *op;
 
index c0ef84e11701fb0840736f29613b40c8242e9ff6..57b7565914e6afc9c007454d8ac3ae3b7dfa5194 100644 (file)
@@ -18,7 +18,7 @@ int fdisk_probe_labels(struct fdisk_context *cxt)
                        continue;
 
                DBG(LABEL, dbgprint("probing for %s", lb->name));
-               if (lb->op->probe(cxt) != 1) {
+               if (lb->op->probe(cxt, lb) != 1) {
                        if (lb->op->deinit)
                                lb->op->deinit(lb);     /* for sure */
                        continue;
@@ -71,7 +71,7 @@ int fdisk_write_disklabel(struct fdisk_context *cxt)
        if (!cxt->label->op->write)
                return -ENOSYS;
 
-       return cxt->label->op->write(cxt);
+       return cxt->label->op->write(cxt, cxt->label);
 }
 
 /**
@@ -89,7 +89,7 @@ int fdisk_verify_disklabel(struct fdisk_context *cxt)
        if (!cxt->label->op->verify)
                return -ENOSYS;
 
-       return cxt->label->op->verify(cxt);
+       return cxt->label->op->verify(cxt, cxt->label);
 }
 
 /**
@@ -111,7 +111,7 @@ int fdisk_add_partition(struct fdisk_context *cxt, int partnum,
                return -ENOSYS;
 
        DBG(LABEL, dbgprint("adding new partition number %d", partnum));
-       cxt->label->op->part_add(cxt, partnum, t);
+       cxt->label->op->part_add(cxt, cxt->label, partnum, t);
        return 0;
 }
 
@@ -133,7 +133,7 @@ int fdisk_delete_partition(struct fdisk_context *cxt, int partnum)
 
        DBG(LABEL, dbgprint("deleting %s partition number %d",
                                cxt->label->name, partnum));
-       return cxt->label->op->part_delete(cxt, partnum);
+       return cxt->label->op->part_delete(cxt, cxt->label, partnum);
 }
 
 /**
@@ -171,7 +171,7 @@ int fdisk_create_disklabel(struct fdisk_context *cxt, const char *name)
                return -ENOSYS;
 
        fdisk_reset_alignment(cxt);
-       return cxt->label->op->create(cxt);
+       return cxt->label->op->create(cxt, cxt->label);
 }
 
 /**
@@ -187,7 +187,7 @@ struct fdisk_parttype *fdisk_get_partition_type(struct fdisk_context *cxt, int p
                return NULL;
 
        DBG(LABEL, dbgprint("partition: %d: get type", partnum));
-       return cxt->label->op->part_get_type(cxt, partnum);
+       return cxt->label->op->part_get_type(cxt, cxt->label, partnum);
 }
 
 /**
@@ -205,7 +205,7 @@ int fdisk_set_partition_type(struct fdisk_context *cxt, int partnum,
                return -EINVAL;
 
        DBG(LABEL, dbgprint("partition: %d: set type", partnum));
-       return cxt->label->op->part_set_type(cxt, partnum, t);
+       return cxt->label->op->part_set_type(cxt, cxt->label, partnum, t);
 }
 
 /**