diff --git a/fdisk/edit_disk.cgi b/fdisk/edit_disk.cgi index dbdd6f64a..b74638522 100755 --- a/fdisk/edit_disk.cgi +++ b/fdisk/edit_disk.cgi @@ -121,33 +121,37 @@ else { print &ui_links_row(\@edlinks); # Buttons for IDE params and SMART -print &ui_hr(); -print &ui_buttons_start(); +my $ui_buttons_content; if (&supports_hdparm($d)) { - print &ui_buttons_row("edit_hdparm.cgi", $text{'index_hdparm'}, + $ui_buttons_content = &ui_buttons_row("edit_hdparm.cgi", $text{'index_hdparm'}, $text{'index_hdparmdesc'}, &ui_hidden("disk", $d->{'index'})); } if (&supports_smart($d)) { - print &ui_buttons_row("../smart-status/index.cgi", $text{'index_smart'}, + $ui_buttons_content = &ui_buttons_row("../smart-status/index.cgi", $text{'index_smart'}, $text{'index_smartdesc'}, &ui_hidden("drive", $d->{'device'})); } if (&supports_relabel($d)) { if ($d->{'table'} eq 'unknown') { - print &ui_buttons_row( + $ui_buttons_content = &ui_buttons_row( "edit_relabel.cgi", $text{'index_relabel2'}, $text{'index_relabeldesc2'}, &ui_hidden("device", $d->{'device'})); } else { - print &ui_buttons_row( + $ui_buttons_content = &ui_buttons_row( "edit_relabel.cgi", $text{'index_relabel'}, $text{'index_relabeldesc'}, &ui_hidden("device", $d->{'device'})); } } -print &ui_buttons_end(); +if ($ui_buttons_content) { + print &ui_hr(); + print &ui_buttons_start(); + print $ui_buttons_content; + print &ui_buttons_end(); +} &ui_print_footer("", $text{'index_return'}); diff --git a/fdisk/edit_part.cgi b/fdisk/edit_part.cgi index 83905c280..3565152b9 100755 --- a/fdisk/edit_part.cgi +++ b/fdisk/edit_part.cgi @@ -111,19 +111,24 @@ $dev = $dinfo->{'prefix'} =~ /^\/dev\/mmcblk.*/ ? $dinfo->{'prefix'}.$np; print &ui_table_row($text{'edit_device'}, $dev); +if (!$in{'new'}) { + @stat = &device_status($dev); + $mounted = $stat[2]; + } + # Partition type if ($pinfo->{'extended'} || $in{'new'} == 3) { # Extended, cannot change print &ui_table_row($text{'edit_type'}, $text{'extended'}); } -elsif ($pinfo->{'edittype'} || $in{'new'}) { +elsif (($pinfo->{'edittype'} || $in{'new'}) && !$mounted) { # Can change print &ui_table_row($text{'edit_type'}, &ui_select("type", $in{'new'} ? &default_tag() : $pinfo->{'type'}, [ map { [ $_, &tag_name($_) ] } (sort { &tag_name($a) cmp &tag_name($b) } - &list_tags()) ])); + &list_tags($pinfo->{'dtable'})) ])); } else { # Tool doesn't allow change @@ -160,9 +165,8 @@ if ($pinfo->{'extended'}) { } } elsif (!$in{'new'}) { - @stat = &device_status($dev); if (@stat) { - $msg = $stat[2] ? 'edit_mount' : 'edit_umount'; + $msg = $mounted ? 'edit_mount' : 'edit_umount'; $msg .= 'vm' if ($stat[1] eq 'swap'); $msg .= 'raid' if ($stat[1] eq 'raid'); $msg .= 'lvm' if ($stat[1] eq 'lvm'); @@ -199,7 +203,7 @@ if (($has_e2label || $has_xfs_db) && &supports_label($pinfo) && !$in{'new'}) { } # Show field for partition name -if (&supports_name($dinfo)) { +if (&supports_name($dinfo) && !$mounted) { print &ui_table_row($text{'edit_name'}, &ui_textbox("name", $pinfo->{'name'}, 20)); } @@ -216,7 +220,7 @@ if ($in{'new'}) { } elsif (@stat && $stat[2]) { print &ui_form_end(); - print "$text{'edit_inuse'}

\n"; + print "$text{'edit_inuse'}\n"; } else { print &ui_form_end([ $pinfo->{'extended'} ? ( ) : @@ -225,13 +229,12 @@ else { } if (!$in{'new'} && !$pinfo->{'extended'}) { - print &ui_hr(); - print &ui_buttons_start(); + my $ui_buttons_content; if (!@stat || $stat[2] == 0) { # Show form for creating filesystem local $rt = @stat ? $stat[1] : &conv_type($pinfo->{'type'}); - print &ui_buttons_row("mkfs_form.cgi", + $ui_buttons_content = &ui_buttons_row("mkfs_form.cgi", $text{'edit_mkfs2'}, $text{'edit_mkfsmsg2'}, &ui_hidden("dev", $dev), &ui_select("type", $rt, @@ -241,7 +244,7 @@ if (!$in{'new'} && !$pinfo->{'extended'}) { if (!$in{'new'} && @stat && $stat[2] == 0 && &can_fsck($stat[1])) { # Show form to fsck filesystem - print &ui_buttons_row("fsck_form.cgi", + $ui_buttons_content = &ui_buttons_row("fsck_form.cgi", $text{'edit_fsck'},&text('edit_fsckmsg', "fsck"), &ui_hidden("dev", $dev)." ". &ui_hidden("type", $stat[1])); @@ -249,7 +252,7 @@ if (!$in{'new'} && !$pinfo->{'extended'}) { if (!$in{'new'} && @stat && $stat[2] == 0 && &can_tune($stat[1])) { # Show form to tune filesystem - print &ui_buttons_row("tunefs_form.cgi", + $ui_buttons_content = &ui_buttons_row("tunefs_form.cgi", $text{'edit_tune'}, $text{'edit_tunemsg'}, &ui_hidden("dev", $dev)." ". &ui_hidden("type", $stat[1])); @@ -260,7 +263,7 @@ if (!$in{'new'} && !$pinfo->{'extended'}) { # Show form to mount filesystem if ($types[0] eq "swap") { # Swap partition - print &ui_buttons_row("../mount/edit_mount.cgi", + $ui_buttons_content = &ui_buttons_row("../mount/edit_mount.cgi", $text{'edit_newmount2'},$text{'edit_mountmsg2'}, &ui_hidden("type", $types[0]). &ui_hidden("newdev", $dev)); @@ -275,14 +278,19 @@ if (!$in{'new'} && !$pinfo->{'extended'}) { else { $dirsel .= &ui_hidden("type", $types[0]); } - print &ui_buttons_row("../mount/edit_mount.cgi", + $ui_buttons_content = &ui_buttons_row("../mount/edit_mount.cgi", $text{'edit_newmount'}, $text{'edit_mountmsg'}, &ui_hidden("newdev", $dev), $dirsel); } } - print &ui_buttons_end(); + if ($ui_buttons_content) { + print &ui_hr(); + print &ui_buttons_start(); + print $ui_buttons_content; + print &ui_buttons_end(); + } } &ui_print_footer("edit_disk.cgi?device=$dinfo->{'device'}", diff --git a/fdisk/fdisk-lib.pl b/fdisk/fdisk-lib.pl index 247b9431a..3b8d0e955 100755 --- a/fdisk/fdisk-lib.pl +++ b/fdisk/fdisk-lib.pl @@ -245,8 +245,7 @@ local $devs = join(" ", @devs); local ($disk, $m2); if ($has_parted) { open(FDISK, join(" ; ", - map { "parted $_ unit cyl print 2>/dev/null || ". - "fdisk -l $_ 2>/dev/null" } @devs)." |"); + map { "parted $_ unit cyl print 2>/dev/null" } @devs)." |"); } else { open(FDISK, "fdisk -l -u=cylinders $devs 2>/dev/null || fdisk -l $devs 2>/dev/null |"); @@ -506,15 +505,18 @@ while() { $disk->{'cylsize'}; push(@{$disk->{'parts'}}, $part); } - elsif (/(\/dev\/\S+?(\d+))\s+(\d+)\s+(\d+)\s+(\d+)\s+([0-9\.]+[kMGTP])\s+(\S.*)/) { + elsif (/(?\/dev\/\S+?(?\d+))\s+(?\d+)\s+(?\d+)\s+(?\d+)\s+(?[0-9\.]+[kMGTP])\s+(?\S.*)/ || + /(?\/dev\/\S+?(?\d+))\s+(?\d+)\s+(?\d+)\s+(?[0-9\.]+[kMGTP])\s+(?\S.*)/) { # Partition within the current disk from fdisk (gpt format) - local $part = { 'number' => $2, - 'device' => $1, - 'type' => $7, - 'start' => $3, - 'end' => $4, - 'blocks' => $5, + local $part = { + 'number' => "$+{num}", + 'device' => "$+{dev}", + 'type' => "$+{type}", + 'start' => "$+{start}", + 'end' => "$+{end}", + 'blocks' => "$+{blocks}", 'index' => scalar(@{$disk->{'parts'}}), + 'dtable' => $disk->{'table'}, 'edittype' => 1, }; $part->{'desc'} = &partition_description($part->{'device'}); $part->{'size'} = ($part->{'end'} - $part->{'start'} + 1) * @@ -861,7 +863,12 @@ undef(@list_disks_partitions_cache); # Returns a list of known partition tag numbers sub list_tags { -if ($has_parted) { +my ($fdisk_gpt) = @_; +if ($fdisk_gpt eq 'gpt') { + # fdisk gpt types + return sort { $a cmp $b } (keys %fdisk_gpt_tags); + } +elsif ($has_parted) { # Parted types return sort { $a cmp $b } (keys %parted_tags); } @@ -875,7 +882,7 @@ else { # Returns a human-readable version of a tag sub tag_name { -return $tags{$_[0]} || $parted_tags{$_[0]} || $hidden_tags{$_[0]}; +return $tags{$_[0]} || $parted_tags{$_[0]} || $fdisk_gpt_tags{$_[0]} || $hidden_tags{$_[0]}; } sub default_tag @@ -1563,6 +1570,14 @@ else { return " $_[2] $in{$_[0]}"; } 'f', 'Windows extended LBA', ); +%fdisk_gpt_tags = ( + '', 'None', + 'EFI System', 'EFI system partition', + 'BIOS boot', 'BIOS boot partition', + 'Linux filesystem', 'Linux filesystem', + 'Linux LVM', 'Linux LVM', + ); + %parted_tags = ( '', 'None', 'fat16', 'Windows FAT16', diff --git a/fdisk/index.cgi b/fdisk/index.cgi index 5ac0f4624..79978025b 100755 --- a/fdisk/index.cgi +++ b/fdisk/index.cgi @@ -9,12 +9,6 @@ require './fdisk-lib.pl'; # Work out which disks are accessible @disks = &list_disks_partitions(); @disks = grep { $access{'view'} || &can_edit_disk($_->{'device'}) } @disks; -if (@disks == 1 && &can_edit_disk($disks[0]->{'device'})) { - # Just one .. go direct to it's page - &redirect("edit_disk.cgi?device=$disks[0]->{'device'}"); - edit; - } - $pdesc = $has_parted ? $text{'index_parted'} : $text{'index_fdisk'}; &ui_print_header($pdesc, $module_info{'desc'}, "", undef, 1, 1, 0, &help_search_link("fdisk", "man", "doc", "howto"));