summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2001-08-29 09:36:45 +0000
committerPascal Rigaux <pixel@mandriva.com>2001-08-29 09:36:45 +0000
commit701635b319c0153cf68896d34cb74b2906e02407 (patch)
treed7a3cf890e8f1c52603b99a5e6159e1b6df474f8
parent8d03aa6906756ad7ae6f6b513f34704376890683 (diff)
downloaddrakx-701635b319c0153cf68896d34cb74b2906e02407.tar
drakx-701635b319c0153cf68896d34cb74b2906e02407.tar.gz
drakx-701635b319c0153cf68896d34cb74b2906e02407.tar.bz2
drakx-701635b319c0153cf68896d34cb74b2906e02407.tar.xz
drakx-701635b319c0153cf68896d34cb74b2906e02407.zip
better floppy detection/info
-rw-r--r--perl-install/c/stuff.xs.pm15
-rw-r--r--perl-install/detect_devices.pm7
2 files changed, 21 insertions, 1 deletions
diff --git a/perl-install/c/stuff.xs.pm b/perl-install/c/stuff.xs.pm
index f6e63a85d..563c97013 100644
--- a/perl-install/c/stuff.xs.pm
+++ b/perl-install/c/stuff.xs.pm
@@ -26,6 +26,7 @@ print '
#include <linux/kd.h>
#include <linux/hdreg.h>
#include <linux/vt.h>
+#include <linux/fd.h>
#include <linux/cdrom.h>
#include <linux/loop.h>
#include <net/if.h>
@@ -236,6 +237,20 @@ isDvdDrive(fd)
OUTPUT:
RETVAL
+char *
+floppy_info(name)
+ char * name
+ CODE:
+ int fd = open(name, O_RDONLY | O_NONBLOCK);
+ RETVAL = NULL;
+ if (fd != -1) {
+ char drivtyp[17];
+ ioctl(fd, FDGETDRVTYP, (void *)drivtyp);
+ RETVAL = drivtyp;
+ }
+ OUTPUT:
+ RETVAL
+
unsigned int
total_sectors(fd)
int fd
diff --git a/perl-install/detect_devices.pm b/perl-install/detect_devices.pm
index 46626e06c..dba137f4c 100644
--- a/perl-install/detect_devices.pm
+++ b/perl-install/detect_devices.pm
@@ -73,10 +73,15 @@ sub get_mac_generation() {
return "Unknown Generation";
}
+sub dev_is_devfs { 0 && -e "/dev/.devfsd" }
+
sub floppies() {
require modules;
eval { modules::load("floppy") };
- my @fds = map {; { device => $_, media_type => 'fd' } } grep { tryOpen($_) } qw(fd0 fd1);
+ my @fds = map {
+ my $info = (!dev_is_devfs() || -e "/dev/$_") && c::floppy_info(devices::make($_));
+ if_($info && $info ne '(null)', { device => $_, media_type => 'fd', info => $info })
+ } qw(fd0 fd1);
my @ide = ls120s() and modules::load("ide-floppy");
my @scsi = grep { $_->{media_type} eq 'fd' } getSCSI();
@ide, @scsi, @fds;