diff options
author | damien <damien@mandriva.com> | 2000-11-28 16:56:52 +0000 |
---|---|---|
committer | damien <damien@mandriva.com> | 2000-11-28 16:56:52 +0000 |
commit | 0880c7ba8ce88e87fa600aeb367a8f88a3ae71e7 (patch) | |
tree | 33f7ac905998f9ad6d85090f777ee4c0d0c67032 /perl-install/devices.pm | |
parent | d5c526273db473a7d87a26000585900fc10dda7d (diff) | |
download | drakx-backup-do-not-use-topic/unlabeled-1.1.1.tar drakx-backup-do-not-use-topic/unlabeled-1.1.1.tar.gz drakx-backup-do-not-use-topic/unlabeled-1.1.1.tar.bz2 drakx-backup-do-not-use-topic/unlabeled-1.1.1.tar.xz drakx-backup-do-not-use-topic/unlabeled-1.1.1.zip |
branch to build the firewall install.topic/unlabeled-1.1.1
Diffstat (limited to 'perl-install/devices.pm')
-rw-r--r-- | perl-install/devices.pm | 106 |
1 files changed, 70 insertions, 36 deletions
diff --git a/perl-install/devices.pm b/perl-install/devices.pm index 704b3d40d..a91e60ae9 100644 --- a/perl-install/devices.pm +++ b/perl-install/devices.pm @@ -1,4 +1,4 @@ -package devices; +package devices; # $Id$ use diagnostics; use strict; @@ -17,15 +17,15 @@ sub size($) { my $valid_offset = sub { sysseek(F, $_[0], 0) && sysread(F, my $a, 1) }; - # first try getting the size nicely + #- first try getting the size nicely my $size = 0; ioctl(F, c::BLKGETSIZE(), $size) and return unpack("i", $size) * $common::SECTORSIZE; - # sad it didn't work, well searching the size using the dichotomy algorithm! + #- sad it didn't work, well searching the size using the dichotomy algorithm! my $low = 0; my ($high, $mid); - # first find n where 2^n < size <= 2^n+1 + #- first find n where 2^n < size <= 2^n+1 for ($high = 1; $high > 0 && &$valid_offset($high); $high *= 2) { $low = $high; } while ($low < $high - 1) { @@ -35,73 +35,107 @@ sub size($) { $low + 1; } -sub make($) { - local $_ = my $file = $_[0]; - my ($type, $major, $minor); +sub set_loop { + my ($file) = @_; - unless (s,^/(dev|tmp)/,,) { - $file = -e "/dev/$file" ? "/dev/$file" : "/tmp/$file"; + foreach (0..7) { + local *F; + my $dev = make("loop$_"); + sysopen F, $dev, 2 or next; + !ioctl(F, c::LOOP_GET_STATUS(), my $tmp) && $! == 6 or next; #- 6 == ENXIO + log::l("trying with loop $dev"); + return c::set_loop(fileno F, $file) && $dev; } +} - -e $file and return $file; # assume nobody takes fun at creating files named as device +sub entry { + my ($type, $major, $minor); + local ($_) = @_; - if (/^sd(.)(\d\d)/) { + if (/^sd(.)(\d{0,2})/) { $type = c::S_IFBLK(); $major = 8; - $minor = ord($1) - ord('a') + $2; + $minor = 16 * (ord($1) - ord('a')) + ($2 || 0); } elsif (/^hd(.)(\d{0,2})/) { $type = c::S_IFBLK(); - ($major, $minor) = + ($major, $minor) = @{ $ {{'a' => [3, 0], 'b' => [3, 64], 'c' => [22,0], 'd' => [22,64], 'e' => [33,0], 'f' => [33,64], 'g' => [34,0], 'h' => [34,64], }}{$1} or die "unknown device $_" }; $minor += $2 || 0; - } elsif (/^ram(.)/) { + } elsif (/^ram(.*)/) { $type = c::S_IFBLK(); $major = 1; $minor = $1 eq '' ? 1 : $1; } elsif (m|^rd/c(\d+)d(\d+)(p(\d+))?|) { - # dac 960 "/rd/cXdXXpX" + # dac 960 "rd/cXdXXpX" $type = c::S_IFBLK(); $major = 48 + $1; $minor = 8 * $2 + $4; - } elsif (m|ida/c(\d+)d(\d+)(p(\d+))|) { + } elsif (m|ida/c(\d+)d(\d+)(p(\d+))?|) { # Compaq Smart Array "ida/c0d0{p1}" $type = c::S_IFBLK(); $major = 72 + $1; - $minor = 16 * $2 + $4; - } else { - ($type, $major, $minor) = - @{ $ {{"aztcd" => [ c::S_IFBLK(), 29, 0 ], + $minor = 16 * $2 + ($4 || 0); + } elsif (/(.*)(\d+)$/) { + ($type, $major, $minor) = + @{ ${{"fd" => [ c::S_IFBLK(), 2, 0 ], + "hidbp-mse-" => [ c::S_IFCHR(), 10, 32 ], + "lp" => [ c::S_IFCHR(), 6, 0 ], + "usb/lp" => [ c::S_IFCHR(), 180, 0 ], + "loop" => [ c::S_IFBLK(), 7, 0 ], + "md" => [ c::S_IFBLK(), 9, 0 ], + "nst" => [ c::S_IFCHR(), 9, 128], + "scd" => [ c::S_IFBLK(), 11, 0 ], + "ttyS" => [ c::S_IFCHR(), 4, 64 ], + }}{$1}}; + $minor += $2; + } + unless ($type) { + ($type, $major, $minor) = + @{ ${{"aztcd" => [ c::S_IFBLK(), 29, 0 ], "bpcd" => [ c::S_IFBLK(), 41, 0 ], "cdu31a" => [ c::S_IFBLK(), 15, 0 ], "cdu535" => [ c::S_IFBLK(), 24, 0 ], "cm206cd" => [ c::S_IFBLK(), 32, 0 ], - "tty" => [ c::S_IFCHR(), 5, 0 ], - "fd0" => [ c::S_IFBLK(), 2, 0 ], - "fd1" => [ c::S_IFBLK(), 2, 1 ], "gscd" => [ c::S_IFBLK(), 16, 0 ], - "lp0" => [ c::S_IFCHR(), 6, 0 ], - "lp1" => [ c::S_IFCHR(), 6, 1 ], - "lp2" => [ c::S_IFCHR(), 6, 2 ], "mcd" => [ c::S_IFBLK(), 23, 0 ], "mcdx" => [ c::S_IFBLK(), 20, 0 ], - "nst0" => [ c::S_IFCHR(), 9, 128 ], + "mem" => [ c::S_IFCHR(), 1, 1 ], "optcd" => [ c::S_IFBLK(), 17, 0 ], + "kbd" => [ c::S_IFCHR(), 11, 0 ], + "psaux" => [ c::S_IFCHR(), 10, 1 ], + "random" => [ c::S_IFCHR(), 1, 8 ], "sbpcd" => [ c::S_IFBLK(), 25, 0 ], - "scd0" => [ c::S_IFBLK(), 11, 0 ], - "scd1" => [ c::S_IFBLK(), 11, 1 ], "sjcd" => [ c::S_IFBLK(), 18, 0 ], - }}{$_} or die "unknown device $type" }; + "tty" => [ c::S_IFCHR(), 5, 0 ], + "usbmouse"=> [ c::S_IFCHR(), 13, 63], #- aka /dev/input/mice + "zero" => [ c::S_IFCHR(), 1, 5 ], + }}{$_} or die "unknown device $_ (caller is " . join(":", caller()) . ")" }; } - - # make a directory for this inode if needed. - mkdir dirname($file), 0755; - - syscall_('mknod', $file, $type | 0600, makedev($major, $minor)) or die "mknod failed (dev:$_): $!"; + ($type, $major, $minor); +} + + +sub make($) { + local $_ = my $file = $_[0]; + + if (m,^(.*/(?:dev|tmp))/(.*),) { + $_ = $2; + } else { + -e $file or $file = "/tmp/$_"; + -e $file or $file = "/dev/$_"; + } + -e $file and return $file; #- assume nobody takes fun at creating files named as device + + my ($type, $major, $minor) = entry($_); + + #- make a directory for this inode if needed. + mkdir dirname($file), 0755; + + syscall_('mknod', $file, $type | 0600, makedev($major, $minor)) or die "mknod failed (dev $_): $!"; $file; } - |