diff options
Diffstat (limited to 'perl-install/partition_table.pm')
-rw-r--r-- | perl-install/partition_table.pm | 67 |
1 files changed, 34 insertions, 33 deletions
diff --git a/perl-install/partition_table.pm b/perl-install/partition_table.pm index b8f96fb1a..c7f968c6f 100644 --- a/perl-install/partition_table.pm +++ b/perl-install/partition_table.pm @@ -6,7 +6,7 @@ use vars qw(@ISA %EXPORT_TAGS @EXPORT_OK @important_types @important_types2 @fie @ISA = qw(Exporter); %EXPORT_TAGS = ( - types => [ qw(type2name type2fs name2type fs2type isExtended isExt2 isThisFs isTrueLocalFS isTrueFS isSwap isDos isWin isFat isFat_or_NTFS isSunOS isOtherAvailableFS isPrimary isRawLVM isRawRAID isRAID isLVM isMountableRW isNonMountable isPartOfLVM isPartOfRAID isPartOfLoopback isLoopback isMounted isBusy isSpecial maybeFormatted isApple isAppleBootstrap isEfi) ], + types => [ qw(pt_type2name type2fs name2pt_type fs2pt_type isExtended isExt2 isThisFs isTrueLocalFS isTrueFS isSwap isDos isWin isFat isFat_or_NTFS isSunOS isOtherAvailableFS isPrimary isRawLVM isRawRAID isRAID isLVM isMountableRW isNonMountable isPartOfLVM isPartOfRAID isPartOfLoopback isLoopback isMounted isBusy isSpecial maybeFormatted isApple isAppleBootstrap isEfi) ], ); @EXPORT_OK = map { @$_ } values %EXPORT_TAGS; @@ -27,7 +27,7 @@ use log; @bad_types = ('Empty', 'DOS 3.3+ Extended Partition', 'Win95: Extended partition, LBA-mapped', 'Linux extended partition'); -my %types = ( +my %pt_types = ( 0x0 => 'Empty', if_(arch() =~ /^ppc/, 0x183 => 'Journalised FS: ReiserFS', @@ -177,7 +177,7 @@ if_(arch() =~ /^ppc/, 0xff => 'Xenix Bad Block Table', ); -my %type2fs = ( +my %pt_type2fs = ( arch() =~ /^ppc/ ? ( 0x07 => 'hpfs', ) : ( @@ -215,41 +215,42 @@ arch() !~ /sparc/ ? ( 0x402 => 'hfs', ); -my %types_rev = reverse %types; -my %fs2type = reverse %type2fs; +my %pt_types_rev = reverse %pt_types; +my %fs2pt_type = reverse %pt_type2fs; 1; sub important_types() { - my @l = (@important_types, if_($::expert, @important_types2, sort values %types)); + my @l = (@important_types, if_($::expert, @important_types2, sort values %pt_types)); difference2(\@l, \@bad_types); } sub type2fs { my ($part, $o_default) = @_; - my $type = $part->{type}; - $type2fs{$type} || $type =~ /^(\d+)$/ && $o_default || $type; + my $pt_type = $part->{pt_type}; + $pt_type2fs{$pt_type} || $pt_type =~ /^(\d+)$/ && $o_default || $pt_type; } -sub fs2type { $fs2type{$_[0]} || $_[0] } -sub type2name { $types{$_[0]} || $_[0] } -sub name2type { +sub fs2pt_type { $fs2pt_type{$_[0]} || $_[0] } +sub pt_type2name { $pt_types{$_[0]} || $_[0] } +sub name2pt_type { local ($_) = @_; - /0x(.*)/ ? hex $1 : $types_rev{$_} || $_; + /0x(.*)/ ? hex $1 : $pt_types_rev{$_} || $_; } +#sub name2type { { pt_type => name2pt_type($_[0]) } } -sub isEfi { arch() =~ /ia64/ && $_[0]{type} == 0xef } -sub isWholedisk { arch() =~ /^sparc/ && $_[0]{type} == 5 } -sub isExtended { arch() !~ /^sparc/ && ($_[0]{type} == 5 || $_[0]{type} == 0xf || $_[0]{type} == 0x85) } -sub isRawLVM { $_[0]{type} == 0x8e } -sub isRawRAID { $_[0]{type} == 0xfd } +sub isEfi { arch() =~ /ia64/ && $_[0]{pt_type} == 0xef } +sub isWholedisk { arch() =~ /^sparc/ && $_[0]{pt_type} == 5 } +sub isExtended { arch() !~ /^sparc/ && ($_[0]{pt_type} == 5 || $_[0]{pt_type} == 0xf || $_[0]{pt_type} == 0x85) } +sub isRawLVM { $_[0]{pt_type} == 0x8e } +sub isRawRAID { $_[0]{pt_type} == 0xfd } sub isSwap { type2fs($_[0]) eq 'swap' } sub isExt2 { type2fs($_[0]) eq 'ext2' } -sub isDos { arch() !~ /^sparc/ && ${{ 1 => 1, 4 => 1, 6 => 1 }}{$_[0]{type}} } -sub isWin { ${{ 0xb => 1, 0xc => 1, 0xe => 1, 0x1b => 1, 0x1c => 1, 0x1e => 1 }}{$_[0]{type}} } +sub isDos { arch() !~ /^sparc/ && ${{ 1 => 1, 4 => 1, 6 => 1 }}{$_[0]{pt_type}} } +sub isWin { ${{ 0xb => 1, 0xc => 1, 0xe => 1, 0x1b => 1, 0x1c => 1, 0x1e => 1 }}{$_[0]{pt_type}} } sub isFat { isDos($_[0]) || isWin($_[0]) } -sub isFat_or_NTFS { isDos($_[0]) || isWin($_[0]) || $_[0]{type} == 0x107 } -sub isSunOS { arch() =~ /sparc/ && ${{ 0x1 => 1, 0x2 => 1, 0x4 => 1, 0x6 => 1, 0x7 => 1, 0x8 => 1 }}{$_[0]{type}} } +sub isFat_or_NTFS { isDos($_[0]) || isWin($_[0]) || $_[0]{pt_type} == 0x107 } +sub isSunOS { arch() =~ /sparc/ && ${{ 0x1 => 1, 0x2 => 1, 0x4 => 1, 0x6 => 1, 0x7 => 1, 0x8 => 1 }}{$_[0]{pt_type}} } sub isApple { type2fs($_[0]) eq 'apple' && defined $_[0]{isDriver} } sub isAppleBootstrap { type2fs($_[0]) eq 'apple' && defined $_[0]{isBoot} } sub isHiddenMacPart { defined $_[0]{isMap} } @@ -289,7 +290,7 @@ sub description { formatXiB($hd->{totalsectors} || $hd->{size}, 512), $hd->{info} && ", $hd->{info}", $hd->{mntpoint} && ", " . $hd->{mntpoint}, - $hd->{type} && ", " . type2name($hd->{type}); + $hd->{pt_type} && ", " . pt_type2name($hd->{pt_type}); } sub isPrimary { @@ -399,11 +400,11 @@ sub assign_device_numbers { #- isFat_or_NTFS isn't true for 0x7 partitions, only for 0x107. #- alas 0x107 is not set correctly at this stage #- solution: don't bother with 0x7 vs 0x107 here - my ($c, @others) = grep { isFat_or_NTFS($_) || $_->{type} == 0x7 || $_->{type} == 0x17 } @{$hd->{primary}{normal}}; + my ($c, @others) = grep { isFat_or_NTFS($_) || $_->{pt_type} == 0x7 || $_->{pt_type} == 0x17 } @{$hd->{primary}{normal}}; $i = ord 'C'; $c->{device_windobe} = chr($i++) if $c; - $_->{device_windobe} = chr($i++) foreach grep { isFat_or_NTFS($_) || $_->{type} == 0x7 || $_->{type} == 0x17 } map { $_->{normal} } @{$hd->{extended}}; + $_->{device_windobe} = chr($i++) foreach grep { isFat_or_NTFS($_) || $_->{pt_type} == 0x7 || $_->{pt_type} == 0x17 } map { $_->{normal} } @{$hd->{extended}}; $_->{device_windobe} = chr($i++) foreach @others; } @@ -435,7 +436,7 @@ sub adjust_main_extended { $start = min($start, $_->{start}); $end = max($end, $_->{start} + $_->{size}); $only_linux &&= isTrueLocalFS($_) || isSwap($_); - $has_win_lba ||= $_->{type} == 0xc || $_->{type} == 0xe; + $has_win_lba ||= $_->{pt_type} == 0xc || $_->{pt_type} == 0xe; } $l->{start} = $hd->{primary}{extended}{start} = $start; $l->{size} = $hd->{primary}{extended}{size} = $end - $start; @@ -474,12 +475,12 @@ sub get_normal_parts_and_holes { my @l = map { my $current = $start; $start = $_->{start} + $_->{size}; - my $hole = { start => $current, size => $_->{start} - $current, type => 0, rootDevice => $hd->{device} }; + my $hole = { start => $current, size => $_->{start} - $current, pt_type => 0, rootDevice => $hd->{device} }; $hole, $_; } sort { $a->{start} <=> $b->{start} } grep { !isWholedisk($_) } get_normal_parts($hd); - push @l, { start => $start, size => $last - $start, type => 0, rootDevice => $hd->{device} }; - grep { $_->{type} || $_->{size} >= $hd->cylinder_size } @l; + push @l, { start => $start, size => $last - $start, pt_type => 0, rootDevice => $hd->{device} }; + grep { $_->{pt_type} || $_->{size} >= $hd->cylinder_size } @l; } sub read_one($$) { @@ -516,8 +517,8 @@ sub read_one($$) { } my @extended = $hd->hasExtended ? grep { isExtended($_) } @$pt : (); - my @normal = grep { $_->{size} && $_->{type} && !isExtended($_) } @$pt; - my $nb_special_empty = int(grep { $_->{size} && $_->{type} == 0 } @$pt); + my @normal = grep { $_->{size} && $_->{pt_type} && !isExtended($_) } @$pt; + my $nb_special_empty = int(grep { $_->{size} && $_->{pt_type} == 0 } @$pt); @extended > 1 and die "more than one extended partition"; @@ -733,7 +734,7 @@ sub remove { 0; } -# create of partition at starting at `start', of size `size' and of type `type' (nice comment, uh?) +# create of partition at starting at `start', of size `size' and of type `pt_type' (nice comment, uh?) sub add_primary { my ($hd, $part) = @_; @@ -777,13 +778,13 @@ The only solution is to move your primary partitions to have the hole next to th $l->{start} = round_down($l->{normal}{start} - 1, $hd->cylinder_size); $l->{size} = $l->{normal}{start} + $l->{normal}{size} - $l->{start}; my $ext = { %$l }; - unshift @{$hd->{extended}}, { type => 5, raw => [ $part, $ext, {}, {} ], normal => $part, extended => $ext }; + unshift @{$hd->{extended}}, { pt_type => 5, raw => [ $part, $ext, {}, {} ], normal => $part, extended => $ext }; #- size will be autocalculated :) } else { my ($ext, $ext_size) = is_empty_array_ref($hd->{extended}) ? ($hd->{primary}, -1) : #- -1 size will be computed by adjust_main_extended (top(@{$hd->{extended}}), $part->{size}); - my %ext = (type => $extended_type || 5, start => $part->{start}, size => $ext_size); + my %ext = (pt_type => $extended_type || 5, start => $part->{start}, size => $ext_size); $hd->raw_add($ext->{raw}, \%ext); $ext->{extended} = \%ext; |