summaryrefslogtreecommitdiffstats
path: root/fdisks/fdisk.c
diff options
context:
space:
mode:
authorKarel Zak2013-01-22 13:46:55 +0100
committerKarel Zak2013-03-11 12:47:31 +0100
commite3661531e69e62ff4277b01da7b0e82ec832fbbe (patch)
tree6e9cab3b2411e249627161108233abd2136a3805 /fdisks/fdisk.c
parentlibfdisk: add part_get_status operation (diff)
downloadkernel-qcow2-util-linux-e3661531e69e62ff4277b01da7b0e82ec832fbbe.tar.gz
kernel-qcow2-util-linux-e3661531e69e62ff4277b01da7b0e82ec832fbbe.tar.xz
kernel-qcow2-util-linux-e3661531e69e62ff4277b01da7b0e82ec832fbbe.zip
fdisk: (dos) kill 'partitions' global variable
... and use size_t for partition numbers Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'fdisks/fdisk.c')
-rw-r--r--fdisks/fdisk.c64
1 files changed, 38 insertions, 26 deletions
diff --git a/fdisks/fdisk.c b/fdisks/fdisk.c
index a73cf312b..62ecdf4a9 100644
--- a/fdisks/fdisk.c
+++ b/fdisks/fdisk.c
@@ -116,8 +116,7 @@ sector_t get_nr_sects(struct partition *p) {
char *line_ptr, /* interactive input */
line_buffer[LINE_LENGTH];
-int nowarn = 0, /* no warnings for fdisk -l/-s */
- partitions = 4; /* maximum partition + 1 */
+int nowarn = 0; /* no warnings for fdisk -l/-s */
unsigned int user_cylinders, user_heads, user_sectors;
@@ -639,7 +638,10 @@ static void change_partition_type(struct fdisk_context *cxt)
int i;
struct fdisk_parttype *t, *org_t;
- i = get_existing_partition(cxt, 0, partitions);
+ assert(cxt);
+ assert(cxt->label);
+
+ i = get_existing_partition(cxt, 0, cxt->label->nparts_max);
if (i == -1)
return;
@@ -763,19 +765,11 @@ static void new_partition(struct fdisk_context *cxt)
if (fdisk_is_disklabel(cxt, SUN) ||
fdisk_is_disklabel(cxt, SGI) ||
- fdisk_is_disklabel(cxt, GPT)) {
+ fdisk_is_disklabel(cxt, GPT))
- size_t dflt = 0;
+ partnum = get_partition_dflt(cxt, 0, cxt->label->nparts_max,
+ cxt->label->nparts_cur + 1);
- /*
- * TODO: always use label->nparts_cur + 1
- * (currenly only few drivers maintain label->nparts_* counters)
- */
- if (cxt->label->nparts_max)
- dflt = cxt->label->nparts_cur + 1;
-
- partnum = get_partition_dflt(cxt, 0, partitions, dflt);
- }
fdisk_add_partition(cxt, partnum, NULL);
}
@@ -848,14 +842,18 @@ print_buffer(struct fdisk_context *cxt, unsigned char pbuffer[]) {
static void print_raw(struct fdisk_context *cxt)
{
- int i;
+ size_t i;
+
+ assert(cxt);
+ assert(cxt->label);
printf(_("Device: %s\n"), cxt->dev_path);
if (fdisk_is_disklabel(cxt, SUN) ||
fdisk_is_disklabel(cxt, SGI) ||
fdisk_is_disklabel(cxt, GPT))
print_buffer(cxt, cxt->firstsector);
- else for (i = 3; i < partitions; i++)
+
+ else for (i = 3; i < cxt->label->nparts_max; i++)
print_buffer(cxt, ptes[i].sectorbuffer);
}
@@ -871,7 +869,11 @@ expert_command_prompt(struct fdisk_context *cxt)
{
char c;
+ assert(cxt);
+
while(1) {
+ assert(cxt->label);
+
putchar('\n');
c = tolower(read_char(cxt, _("Expert command (m for help): ")));
switch (c) {
@@ -881,7 +883,8 @@ expert_command_prompt(struct fdisk_context *cxt)
break;
case 'b':
if (fdisk_is_disklabel(cxt, DOS))
- dos_move_begin(cxt, get_partition(cxt, 0, partitions));
+ dos_move_begin(cxt, get_partition(cxt, 0,
+ cxt->label->nparts_max));
break;
case 'c':
user_cylinders = read_int(cxt, 1, cxt->geom.cylinders, 1048576, 0,
@@ -904,7 +907,7 @@ expert_command_prompt(struct fdisk_context *cxt)
break;
case 'f':
if (fdisk_is_disklabel(cxt, DOS))
- dos_fix_partition_table_order();
+ dos_fix_partition_table_order(cxt);
break;
case 'g':
fdisk_create_disklabel(cxt, "sgi");
@@ -1052,6 +1055,8 @@ static void command_prompt(struct fdisk_context *cxt)
{
int c;
+ assert(cxt);
+
if (fdisk_is_disklabel(cxt, OSF)) {
putchar('\n');
/* OSF label, and no DOS label */
@@ -1065,18 +1070,23 @@ static void command_prompt(struct fdisk_context *cxt)
}
while (1) {
+
+ assert(cxt->label);
+
putchar('\n');
c = tolower(read_char(cxt, _("Command (m for help): ")));
switch (c) {
case 'a':
if (fdisk_is_disklabel(cxt, DOS))
- dos_toggle_active(cxt, get_partition(cxt, 1, partitions));
+ dos_toggle_active(cxt,
+ get_partition(cxt, 1, cxt->label->nparts_max));
else if (fdisk_is_disklabel(cxt, SUN))
- toggle_sunflags(cxt, get_partition(cxt, 1, partitions),
- SUN_FLAG_UNMNT);
+ toggle_sunflags(cxt,
+ get_partition(cxt, 1, cxt->label->nparts_max),
+ SUN_FLAG_UNMNT);
else if (fdisk_is_disklabel(cxt, SGI))
sgi_set_bootpartition(cxt,
- get_partition(cxt, 1, partitions));
+ get_partition(cxt, 1, cxt->label->nparts_max));
else
unknown_command(c);
break;
@@ -1097,16 +1107,18 @@ static void command_prompt(struct fdisk_context *cxt)
if (fdisk_is_disklabel(cxt, DOS))
toggle_dos_compatibility_flag(cxt);
else if (fdisk_is_disklabel(cxt, SUN))
- toggle_sunflags(cxt, get_partition(cxt, 1, partitions),
- SUN_FLAG_RONLY);
+ toggle_sunflags(cxt,
+ get_partition(cxt, 1, cxt->label->nparts_max),
+ SUN_FLAG_RONLY);
else if (fdisk_is_disklabel(cxt, SGI))
sgi_set_swappartition(cxt,
- get_partition(cxt, 1, partitions));
+ get_partition(cxt, 1, cxt->label->nparts_max));
else
unknown_command(c);
break;
case 'd':
- delete_partition(cxt, get_existing_partition(cxt, 1, partitions));
+ delete_partition(cxt,
+ get_existing_partition(cxt, 1, cxt->label->nparts_max));
break;
case 'g':
fdisk_create_disklabel(cxt, "gpt");