static int sgi_set_partition(struct fdisk_context *cxt, size_t i, unsigned int start, unsigned int length, int sys) { struct sgi_disklabel *sgilabel; assert(cxt); assert(cxt->label); assert(fdisk_is_disklabel(cxt, SGI)); sgilabel = self_disklabel(cxt); sgilabel->partitions[i].type = cpu_to_be32(sys); sgilabel->partitions[i].num_blocks = cpu_to_be32(length); sgilabel->partitions[i].first_block = cpu_to_be32(start); fdisk_label_set_changed(cxt->label, 1); if (sgi_gaps(cxt) < 0) /* rebuild freelist */ fdisk_warnx(cxt, _("Partition overlap on the disk.")); if (length) { struct fdisk_parttype *t = fdisk_get_parttype_from_code(cxt, sys); fdisk_info_new_partition(cxt, i + 1, start, start + length, t); } return 0; }
static void set_sun_partition(struct fdisk_context *cxt, size_t i, uint32_t start,uint32_t stop, uint16_t sysid) { struct sun_disklabel *sunlabel = self_disklabel(cxt); struct fdisk_parttype *t = fdisk_get_parttype_from_code(cxt, sysid); sunlabel->vtoc.infos[i].id = cpu_to_be16(sysid); sunlabel->vtoc.infos[i].flags = cpu_to_be16(0); sunlabel->partitions[i].start_cylinder = cpu_to_be32(start / (cxt->geom.heads * cxt->geom.sectors)); sunlabel->partitions[i].num_sectors = cpu_to_be32(stop - start); fdisk_label_set_changed(cxt->label, 1); fdisk_info_new_partition(cxt, i + 1, start, stop, t); }