void change_partition_type(struct fdisk_context *cxt) { size_t i; struct fdisk_parttype *t = NULL, *org_t = NULL; assert(cxt); assert(cxt->label); if (fdisk_ask_partnum(cxt, &i, FALSE)) return; org_t = t = fdisk_get_partition_type(cxt, i); if (!t) fdisk_warnx(cxt, _("Partition %zu does not exist yet!"), i + 1); else { do { t = ask_partition_type(cxt); } while (!t); if (fdisk_set_partition_type(cxt, i, t) == 0) fdisk_sinfo(cxt, FDISK_INFO_SUCCESS, _("Changed type of partition '%s' to '%s'."), org_t ? org_t->name : _("Unknown"), t ? t->name : _("Unknown")); else fdisk_info(cxt, _("Type of partition %zu is unchanged: %s."), i + 1, org_t ? org_t->name : _("Unknown")); } fdisk_free_parttype(t); fdisk_free_parttype(org_t); }
static int sgi_list_table(struct fdisk_context *cxt) { struct tt *tb = NULL; struct sgi_disklabel *sgilabel = self_disklabel(cxt); struct sgi_device_parameter *sgiparam = &sgilabel->devparam; size_t i, used; char *p; int rc; if (fdisk_context_display_details(cxt)) fdisk_colon(cxt, _( "Label geometry: %d heads, %llu sectors\n" " %llu cylinders, %d physical cylinders\n" " %d extra sects/cyl, interleave %d:1\n"), cxt->geom.heads, cxt->geom.sectors, cxt->geom.cylinders, be16_to_cpu(sgiparam->pcylcount), (int) sgiparam->sparecyl, be16_to_cpu(sgiparam->ilfact)); /* * Partitions */ tb = tt_new_table(TT_FL_FREEDATA); if (!tb) return -ENOMEM; tt_define_column(tb, _("Pt#"), 3, TT_FL_RIGHT); tt_define_column(tb, _("Device"), 0.2, 0); tt_define_column(tb, _("Info"), 2, 0); tt_define_column(tb, _("Start"), 9, TT_FL_RIGHT); tt_define_column(tb, _("End"), 9, TT_FL_RIGHT); tt_define_column(tb, _("Sectors"), 9, TT_FL_RIGHT); tt_define_column(tb, _("Id"), 2, TT_FL_RIGHT); tt_define_column(tb, _("System"), 0.2, TT_FL_TRUNC); for (i = 0, used = 1; i < cxt->label->nparts_max; i++) { uint32_t start, len; struct fdisk_parttype *t; struct tt_line *ln; if (sgi_get_num_sectors(cxt, i) == 0) continue; ln = tt_add_line(tb, NULL); if (!ln) continue; start = sgi_get_start_sector(cxt, i); len = sgi_get_num_sectors(cxt, i); t = fdisk_get_partition_type(cxt, i); if (asprintf(&p, "%zu:", i + 1) > 0) tt_line_set_data(ln, 0, p); /* # */ p = fdisk_partname(cxt->dev_path, used++); if (p) tt_line_set_data(ln, 1, p); /* Device */ p = sgi_get_swappartition(cxt) == (int) i ? "swap" : sgi_get_bootpartition(cxt) == (int) i ? "boot" : NULL; if (p) tt_line_set_data(ln, 2, strdup(p)); /* Info */ if (asprintf(&p, "%ju", (uintmax_t) fdisk_scround(cxt, start)) > 0) tt_line_set_data(ln, 3, p); /* Start */ if (asprintf(&p, "%ju", (uintmax_t) fdisk_scround(cxt, start + len) - 1) > 0) tt_line_set_data(ln, 4, p); /* End */ if (asprintf(&p, "%ju", (uintmax_t) len) > 0) tt_line_set_data(ln, 5, p); /* Sectors*/ if (asprintf(&p, "%2x", t->type) > 0) tt_line_set_data(ln, 6, p); /* type ID */ if (t->name) tt_line_set_data(ln, 7, strdup(t->name)); /* type Name */ fdisk_free_parttype(t); } rc = fdisk_print_table(cxt, tb); tt_free_table(tb); if (rc) return rc; /* * Volumes */ tb = tt_new_table(TT_FL_FREEDATA); if (!tb) return -ENOMEM; tt_define_column(tb, _("#"), 3, TT_FL_RIGHT); tt_define_column(tb, _("Name"), 0.2, 0); tt_define_column(tb, _("Sector"), 2, TT_FL_RIGHT); tt_define_column(tb, _("Size"), 9, TT_FL_RIGHT); for (i = 0, used = 0; i < SGI_MAXVOLUMES; i++) { struct tt_line *ln; uint32_t start = be32_to_cpu(sgilabel->volume[i].block_num), len = be32_to_cpu(sgilabel->volume[i].num_bytes); if (!len) continue; ln = tt_add_line(tb, NULL); if (!ln) continue; if (asprintf(&p, "%zu:", i) > 0) tt_line_set_data(ln, 0, p); /* # */ if (*sgilabel->volume[i].name) tt_line_set_data(ln, 1, strndup((char *) sgilabel->volume[i].name, sizeof(sgilabel->volume[i].name))); /* Name */ if (asprintf(&p, "%ju", (uintmax_t) start) > 0) tt_line_set_data(ln, 2, p); /* Sector */ if (asprintf(&p, "%ju", (uintmax_t) len) > 0) tt_line_set_data(ln, 3, p); /* Size */ used++; } if (used) rc = fdisk_print_table(cxt, tb); tt_free_table(tb); fdisk_colon(cxt, _("Bootfile: %s"), sgilabel->boot_file); return rc; }
void sgi_list_table(struct fdisk_context *cxt, int xtra) { int i, w; int kpi = 0; /* kernel partition ID */ w = strlen(cxt->dev_path); if (xtra) { printf(_("\nDisk %s (SGI disk label): %d heads, %llu sectors\n" "%llu cylinders, %d physical cylinders\n" "%d extra sects/cyl, interleave %d:1\n" "%s\n" "Units = %s of %d * %ld bytes\n\n"), cxt->dev_path, cxt->geom.heads, cxt->geom.sectors, cxt->geom.cylinders, SSWAP16(sgiparam.pcylcount), (int) sgiparam.sparecyl, SSWAP16(sgiparam.ilfact), (char *)sgilabel, str_units(PLURAL), units_per_sector, cxt->sector_size); } else { printf(_("\nDisk %s (SGI disk label): " "%d heads, %llu sectors, %llu cylinders\n" "Units = %s of %d * %ld bytes\n\n"), cxt->dev_path, cxt->geom.heads, cxt->geom.sectors, cxt->geom.cylinders, str_units(PLURAL), units_per_sector, cxt->sector_size); } printf(_("----- partitions -----\n" "Pt# %*s Info Start End Sectors Id System\n"), w + 1, _("Device")); for (i = 0 ; i < partitions; i++) { if (sgi_get_num_sectors(cxt, i) || debug) { uint32_t start = sgi_get_start_sector(cxt, i); uint32_t len = sgi_get_num_sectors(cxt, i); struct fdisk_parttype *t = fdisk_get_partition_type(cxt, i); kpi++; /* only count nonempty partitions */ printf( "%2d: %s %4s %9ld %9ld %9ld %2x %s\n", /* fdisk part number */ i+1, /* device */ partname(cxt->dev_path, kpi, w+2), /* flags */ (sgi_get_swappartition(cxt) == i) ? "swap" : /* flags */ (sgi_get_bootpartition(cxt) == i) ? "boot" : " ", /* start */ (long) scround(start), /* end */ (long) scround(start+len)-1, /* no odd flag on end */ (long) len, /* type id */ t->type, /* type name */ t->name); fdisk_free_parttype(t); } } printf(_("----- Bootinfo -----\nBootfile: %s\n" "----- Directory Entries -----\n"), sgilabel->boot_file); for (i = 0 ; i < volumes; i++) { if (sgilabel->directory[i].vol_file_size) { uint32_t start = SSWAP32(sgilabel->directory[i].vol_file_start); uint32_t len = SSWAP32(sgilabel->directory[i].vol_file_size); unsigned char *name = sgilabel->directory[i].vol_file_name; printf(_("%2d: %-10s sector%5u size%8u\n"), i, name, (unsigned int) start, (unsigned int) len); } } }
static int sun_list_disklabel(struct fdisk_context *cxt) { struct sun_disklabel *sunlabel; struct tt *tb = NULL; size_t i; int rc; assert(cxt); assert(cxt->label); assert(fdisk_is_disklabel(cxt, SUN)); sunlabel = self_disklabel(cxt); if (fdisk_context_display_details(cxt)) { fdisk_colon(cxt, _("Label geometry: %d rpm, %d alternate and %d physical cylinders,\n" " %d extra sects/cyl, interleave %d:1"), be16_to_cpu(sunlabel->rpm), be16_to_cpu(sunlabel->acyl), be16_to_cpu(sunlabel->pcyl), be16_to_cpu(sunlabel->apc), be16_to_cpu(sunlabel->intrlv)); fdisk_colon(cxt, _("Label ID: %s"), sunlabel->label_id); fdisk_colon(cxt, _("Volume ID: %s"), *sunlabel->vtoc.volume_id ? sunlabel->vtoc.volume_id : _("<none>")); } tb = tt_new_table(TT_FL_FREEDATA); if (!tb) return -ENOMEM; tt_define_column(tb, _("Device"), 0.2, 0); tt_define_column(tb, _("Flag"), 2, TT_FL_RIGHT); tt_define_column(tb, _("Start"), 9, TT_FL_RIGHT); tt_define_column(tb, _("End"), 9, TT_FL_RIGHT); /* TRANSLATORS: keep one blank space behind 'Blocks' */ tt_define_column(tb, _("Blocks "), 9, TT_FL_RIGHT); tt_define_column(tb, _("Id"), 2, TT_FL_RIGHT); tt_define_column(tb, _("System"), 0.2, TT_FL_TRUNC); for (i = 0 ; i < cxt->label->nparts_max; i++) { struct sun_partition *part = &sunlabel->partitions[i]; uint16_t flags = be16_to_cpu(sunlabel->vtoc.infos[i].flags); uint32_t start, len; struct fdisk_parttype *t; struct tt_line *ln; char *p; if (!part->num_sectors) continue; ln = tt_add_line(tb, NULL); if (!ln) continue; start = be32_to_cpu(part->start_cylinder) * cxt->geom.heads * cxt->geom.sectors; len = be32_to_cpu(part->num_sectors); t = fdisk_get_partition_type(cxt, i); p = fdisk_partname(cxt->dev_path, i + 1); if (p) tt_line_set_data(ln, 0, p); /* devname */ if ((flags & SUN_FLAG_UNMNT || flags & SUN_FLAG_RONLY) && asprintf(&p, "%c%c", flags & SUN_FLAG_UNMNT ? 'u' : ' ', flags & SUN_FLAG_RONLY ? 'r' : ' ') > 0) tt_line_set_data(ln, 1, p); /* flags */ if (asprintf(&p, "%ju", (uintmax_t) fdisk_scround(cxt, start)) > 0) tt_line_set_data(ln, 2, p); /* start */ if (asprintf(&p, "%ju", (uintmax_t) fdisk_scround(cxt, start + len - 1)) > 0) tt_line_set_data(ln, 3, p); /* end */ if (asprintf(&p, "%lu%c", (unsigned long) len / 2, len & 1 ? '+' : ' ') > 0) tt_line_set_data(ln, 4, p); /* blocks + flag */ if (asprintf(&p, "%2x", t->type) > 0) tt_line_set_data(ln, 5, p); /* type ID */ if (t->name) tt_line_set_data(ln, 6, strdup(t->name)); /* type Name */ fdisk_free_parttype(t); } rc = fdisk_print_table(cxt, tb); tt_free_table(tb); return rc; }