From: Karel Zak Date: Tue, 11 Dec 2012 17:04:25 +0000 (+0100) Subject: libfdisk: add fdisk_label to driver API X-Git-Tag: v2.23-rc1~153 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8a95621d30c4e4c3e279246f80ef4aeed4f5d71c;p=thirdparty%2Futil-linux.git libfdisk: add fdisk_label to driver API Signed-off-by: Karel Zak --- diff --git a/fdisks/fdiskaixlabel.c b/fdisks/fdiskaixlabel.c index d5872243be..01a425362f 100644 --- a/fdisks/fdiskaixlabel.c +++ b/fdisks/fdiskaixlabel.c @@ -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__))) { diff --git a/fdisks/fdiskbsdlabel.c b/fdisks/fdiskbsdlabel.c index ef2047a0a5..4008e6bf52 100644 --- a/fdisks/fdiskbsdlabel.c +++ b/fdisks/fdiskbsdlabel.c @@ -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; diff --git a/fdisks/fdiskdoslabel.c b/fdisks/fdiskdoslabel.c index 04f529422b..a6d6e2b35a 100644 --- a/fdisks/fdiskdoslabel.c +++ b/fdisks/fdiskdoslabel.c @@ -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; diff --git a/fdisks/fdiskmaclabel.c b/fdisks/fdiskmaclabel.c index f15b802cce..fe989caabc 100644 --- a/fdisks/fdiskmaclabel.c +++ b/fdisks/fdiskmaclabel.c @@ -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" diff --git a/fdisks/fdisksgilabel.c b/fdisks/fdisksgilabel.c index c58e7263be..fa9e592ff8 100644 --- a/fdisks/fdisksgilabel.c +++ b/fdisks/fdisksgilabel.c @@ -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; diff --git a/fdisks/fdisksunlabel.c b/fdisks/fdisksunlabel.c index 77d6601682..28942e4086 100644 --- a/fdisks/fdisksunlabel.c +++ b/fdisks/fdisksunlabel.c @@ -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); diff --git a/fdisks/gpt.c b/fdisks/gpt.c index f9ba9f0724..0dd8ebe13d 100644 --- a/fdisks/gpt.c +++ b/fdisks/gpt.c @@ -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; } diff --git a/libfdisk/src/alignment.c b/libfdisk/src/alignment.c index 25323d1b54..a89182172a 100644 --- a/libfdisk/src/alignment.c +++ b/libfdisk/src/alignment.c @@ -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]", diff --git a/libfdisk/src/context.c b/libfdisk/src/context.c index 6eaa927b0e..4adc7cf302 100644 --- a/libfdisk/src/context.c +++ b/libfdisk/src/context.c @@ -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; } diff --git a/libfdisk/src/fdiskP.h b/libfdisk/src/fdiskP.h index 144717d660..00fc0cd540 100644 --- a/libfdisk/src/fdiskP.h +++ b/libfdisk/src/fdiskP.h @@ -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; diff --git a/libfdisk/src/label.c b/libfdisk/src/label.c index c0ef84e117..57b7565914 100644 --- a/libfdisk/src/label.c +++ b/libfdisk/src/label.c @@ -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); } /**