diff --git a/bsdfdisk/bsdfdisk-lib.pl b/bsdfdisk/bsdfdisk-lib.pl index 9e31d7670..12e46fa3b 100644 --- a/bsdfdisk/bsdfdisk-lib.pl +++ b/bsdfdisk/bsdfdisk-lib.pl @@ -61,7 +61,9 @@ foreach my $dev (glob("/dev/ada[0-9]"), $disk->{'blksper'} = $4; $disk->{'blocks'} = $disk->{'cylinders'} * $disk->{'blksper'}; - $disk->{'size'} = $disk->{'blocks'} * 512; + $disk->{'blocksize'} = 512; # Guessed? + $disk->{'size'} = $disk->{'blocks'} * + $disk->{'blocksize'}; } elsif ($lines[$i+1] !~ // && $lines[$i] =~ /data\s+for\s+partition\s+(\d+)/) { @@ -122,7 +124,8 @@ foreach my $dev (glob("/dev/ada[0-9]"), 'startblock' => $3, 'type' => $4, 'device' =>$slice->{'device'}.$1 }; - # XXX how to get size? + $part->{'size'} = $part->{'blocks'} * + $disk->{'blocksize'}; push(@{$slice->{'parts'}}, $part); } } diff --git a/bsdfdisk/delete_slice.cgi b/bsdfdisk/delete_slice.cgi new file mode 100644 index 000000000..0ed0f0ad7 --- /dev/null +++ b/bsdfdisk/delete_slice.cgi @@ -0,0 +1,44 @@ +#!/usr/local/bin/perl +# Delete a slice, after asking for confirmation + +use strict; +use warnings; +require './bsdfdisk-lib.pl'; +our (%in, %text, $module_name); +&ReadParse(); + +# Get the disk and slice +my @disks = &list_disks_partitions(); +my ($disk) = grep { $_->{'device'} eq $in{'device'} } @disks; +$disk || &error($text{'disk_egone'}); +my ($slice) = grep { $_->{'number'} eq $in{'slice'} } @{$disk->{'slices'}}; +$slice || &error($text{'slice_egone'}); + +&ui_print_header($slice->{'desc'}, $text{'dslice_title'}, ""); + +if ($in{'confirm'}) { + # Delete it + } +else { + # Ask first + my @warn; + foreach my $p (@{$slice->{'parts'}}) { + my @st = &fdisk::device_status($p->{'device'}); + if (@st) { + my $use = &fdisk::device_status_link(@st); + push(@warn, $use); + } + } + print &ui_confirmation_form( + "delete_slice.cgi", + &text('dslice_rusure', "$slice->{'device'}"), + [ [ "device", $in{'device'} ], + [ "slice", $in{'slice'} ] ], + [ [ "confirm", $text{'dslice_confirm'} ] ], + undef, + @warn ? &text('dslice_warn', join(" ", @warn)) : undef); + } + +&ui_print_footer("edit_disk.cgi?device=$in{'device'}", + $text{'disk_return'}); + diff --git a/bsdfdisk/edit_disk.cgi b/bsdfdisk/edit_disk.cgi index c73958764..46baab967 100644 --- a/bsdfdisk/edit_disk.cgi +++ b/bsdfdisk/edit_disk.cgi @@ -1,5 +1,5 @@ #!/usr/local/bin/perl -# Show partitions on one disk +# Show details of a disk, and slices on it use strict; use warnings; @@ -26,7 +26,7 @@ push(@info, &text('disk_device', "$disk->{'device'}")); print &ui_links_row(\@info),"

\n"; # Show partitions table -my @links = ( "".$text{'disk_add'}."" ); if (@{$disk->{'slices'}}) { print &ui_links_row(\@links); @@ -55,7 +55,7 @@ if (@{$disk->{'slices'}}) { # Add row for the slice my $url = "edit_slice.cgi?device=".&urlize($disk->{'device'}). - "&part=".$p->{'number'}; + "&slice=".$p->{'number'}; print &ui_columns_row([ "$p->{'number'}", "".&fdisk::tag_name($p->{'type'})."", diff --git a/bsdfdisk/lang/en b/bsdfdisk/lang/en index 8ad3edad2..b07310277 100644 --- a/bsdfdisk/lang/en +++ b/bsdfdisk/lang/en @@ -31,3 +31,26 @@ disk_add=Add a new slice. select_device=$1 device $2 select_slice=$1 device $2 slice $3 select_part=$1 device $2 slice $3 partition $4 + +slice_title=Edit Slice +slice_egone=Selected slice does not exist! +slice_ssize=Slice size: $1 +slice_sstart=Starting block: $1 +slice_sblocks=Number of blocks: $1 +slice_stype=Slice type: $1 +slice_add=Add a new partition. +slice_letter=Partition +slice_type=Type +slice_extent=Extent +slice_size=Size +slice_start=Start block +slice_end=End block +slice_use=Used by +slice_none=This slice has no partitions yet. +slice_delete=Delete Slice +slice_deletedesc=Delete this slice and all partitions and filesystems within it. Any data on those filesystem will be almost certainly unrecoverable. + +dslice_title=Delete Slice +dslice_rusure=Are you sure you want to delete the slice $1? Any partitions and filesystems within it will also be deleted. +dslice_warn=Warning - this slice is currently used by : $1 +dslice_confirm=Delete Now