diff options
-rw-r--r-- | perl-install/c/stuff.xs.pm | 12 | ||||
-rw-r--r-- | perl-install/commands.pm | 15 | ||||
-rw-r--r-- | perl-install/install_any.pm | 2 | ||||
-rw-r--r-- | perl-install/interactive_newt.pm | 2 | ||||
-rw-r--r-- | perl-install/modules.pm | 5 | ||||
-rw-r--r-- | perl-install/partition_table_raw.pm | 8 |
6 files changed, 32 insertions, 12 deletions
diff --git a/perl-install/c/stuff.xs.pm b/perl-install/c/stuff.xs.pm index 69e7f2d78..fbdc8bf09 100644 --- a/perl-install/c/stuff.xs.pm +++ b/perl-install/c/stuff.xs.pm @@ -96,6 +96,18 @@ lseek_sector(fd, sector, offset) OUTPUT: RETVAL +unsigned int +total_sectors(fd) + int fd + CODE: + { + struct hd_driveid s; + ioctl(fd, HDIO_GET_IDENTITY, &s); + RETVAL = s.lba_capacity; + } + OUTPUT: + RETVAL + void openlog(ident) char *ident diff --git a/perl-install/commands.pm b/perl-install/commands.pm index bb3c6e04b..8fd032fa3 100644 --- a/perl-install/commands.pm +++ b/perl-install/commands.pm @@ -64,18 +64,20 @@ sub tr_ { sub mount { @_ or return cat("/proc/mounts"); - my ($t) = getopts(\@_, qw(t)); + my ($t, $r) = getopts(\@_, qw(tr)); my $fs = $t && shift; - @_ == 2 or die "usage: mount [-t <fs>] <device> <dir>\n", + @_ == 2 or die "usage: mount [-r] [-t <fs>] <device> <dir>\n", " (if /dev/ is left off the device name, a temporary node will be created)\n"; my ($dev, $where) = @_; $fs ||= $where =~ /:/ ? "nfs" : $dev =~ /fd/ ? "vfat" : "ext2"; - require 'fs.pm'; - fs::mount($dev, $where, $fs, 0, 1); + require fs; + require modules; + modules::load_deps("/modules/modules.dep"); + fs::mount($dev, $where, $fs, $r); } sub umount { @@ -251,7 +253,10 @@ sub cp { -d $dest or mkdir $dest, mode($src) or die "mkdir: can't create directory $dest: $!\n"; &$cp(glob_($src), $dest); } elsif (-l $src) { - symlink((readlink($src) || die "readlink failed: $!"), $dest) or die "symlink: can't create symlink $dest: $!\n"; + unless (symlink((readlink($src) || die "readlink failed: $!"), $dest)) { + my $msg = "symlink: can't create symlink $dest: $!\n"; + $force ? warn $msg : die $msg; + } } else { local (*F, *G); open F, $src or die "can't open $src for reading: $!\n"; diff --git a/perl-install/install_any.pm b/perl-install/install_any.pm index 027ba0b64..4e6464a2e 100644 --- a/perl-install/install_any.pm +++ b/perl-install/install_any.pm @@ -435,7 +435,7 @@ sub g_auto_install(;$) { my @fields = qw(mntpoint type size); $o->{partitions} = [ map { my %l; @l{@fields} = @$_{@fields}; \%l } grep { $_->{mntpoint} } @{$::o->{fstab}} ]; - exists $::o->{$_} and $o->{$_} = $::o->{$_} foreach qw(lang autoSCSI authentication printer mouse wacom netc timezone superuser intf keyboard mkbootdisk base users installClass partitioning isUpgrade manualFstab nomouseprobe crypto modem useSupermount auto_probe_pci); #- TODO modules bootloader + exists $::o->{$_} and $o->{$_} = $::o->{$_} foreach qw(lang autoSCSI authentication printer mouse wacom netc timezone superuser intf keyboard mkbootdisk base users installClass partitioning isUpgrade manualFstab nomouseprobe crypto modem useSupermount); #- TODO modules bootloader if (my $card = $::o->{X}{card}) { $o->{X}{card}{$_} = $card->{$_} foreach qw(default_depth); diff --git a/perl-install/interactive_newt.pm b/perl-install/interactive_newt.pm index d16e3632f..6fbc18d3c 100644 --- a/perl-install/interactive_newt.pm +++ b/perl-install/interactive_newt.pm @@ -9,7 +9,7 @@ use vars qw(@ISA); use interactive; use common qw(:common :functional); use log; -use Newt::Newt; +use Newt::Newt; #- !! provides Newt and not Newt::Newt my $width = 80; my $height = 25; diff --git a/perl-install/modules.pm b/perl-install/modules.pm index 1b481883c..57bc2268d 100644 --- a/perl-install/modules.pm +++ b/perl-install/modules.pm @@ -61,7 +61,7 @@ arch() =~ /^sparc/ ? ( "ni52" => "NI 5210", "ni65" => "NI 6510", "es3210" => "Racal-Interlan ES3210", - "rcpci45" => "RedCreek PCI45 LAN", + "rcpci" => "Red Creek Hardware VPN", "epic100" => "SMC 83c170 EPIC/100", "sktr" => "Syskonnect Token ring adaptor", "smc9194" => "SMC 9000 series", @@ -71,6 +71,7 @@ arch() =~ /^sparc/ ? ( "via-rhine" => "VIA Rhine", # "wavelan" => "AT&T WaveLAN & DEC RoamAbout DS", # TODO is a "AT&T GIS WaveLAN ISA" ? "wd" => "WD8003, WD8013 and compatible", + "z85230" => "Z85x30", "dmfe" => "dmfe", "fmv18x" => "fmv18x", @@ -367,7 +368,7 @@ sub load { $type ||= ($drivers{$name} || { type => 'unknown'})->{type}; - load($_, 'prereq') foreach @{$deps{$name}}; + eval { load($_, 'prereq') } foreach @{$deps{$name}}; load_raw($name, @options); } push @{$loaded{$type}}, $name; diff --git a/perl-install/partition_table_raw.pm b/perl-install/partition_table_raw.pm index 41a49d552..d1399f230 100644 --- a/perl-install/partition_table_raw.pm +++ b/perl-install/partition_table_raw.pm @@ -73,11 +73,13 @@ sub get_geometry($) { local *F; sysopen F, $dev, 0 or return; ioctl(F, c::HDIO_GETGEO(), $g) or return; - my %geom; @geom{qw(heads sectors cylinders start)} = unpack "CCSL", $g; - $geom{totalcylinders} = $geom{cylinders}; - { geom => \%geom, totalsectors => $geom{heads} * $geom{sectors} * $geom{cylinders} }; + #- $geom{cylinders} is no good (only a ushort, that means less than 2^16 => at best 512MB) + my $total = c::total_sectors(fileno F); + $geom{totalcylinders} = $total / $geom{heads} * $geom{sectors}; + + { geom => \%geom, totalsectors => $total }; } sub openit($$;$) { sysopen $_[1], $_[0]{file}, $_[2] || 0; } |