summaryrefslogtreecommitdiffstats
path: root/loader/devices.c
diff options
context:
space:
mode:
Diffstat (limited to 'loader/devices.c')
-rw-r--r--loader/devices.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/loader/devices.c b/loader/devices.c
index 09ab1e8fc..c79ccbd34 100644
--- a/loader/devices.c
+++ b/loader/devices.c
@@ -24,6 +24,10 @@
#include "kudzu/kudzu.h"
#include "isys/cpio.h"
+
+/* pulled in from loader.c */
+char *getCurrentFloppyDevice(void);
+
void eject(char * deviceName) {
int fd;
@@ -223,6 +227,7 @@ int devLoadDriverDisk(moduleInfoSet modInfo, moduleList modLoaded,
int askForExistence, char * device) {
int rc;
int done = 0;
+ char *origdev, *usedev;
struct driverDiskInfo * ddi;
ddi = calloc(sizeof(*ddi), 1);
@@ -246,11 +251,24 @@ int devLoadDriverDisk(moduleInfoSet modInfo, moduleList modLoaded,
device or IDE CD-ROM (i.e. it is only USB), they may have
unplugged their CD-ROM at this point to plug in a USB floppy
device. */
+
+ /* XXXX this is making the big assumption we are only pulling a
+ driver disk from the floppy device. setFloppyDevice() will
+ set the extern char *floppyDevice to the proper device */
+
+ /* If floppyDevice changed after calling setFloppyDevice(), use
+ the new value. Otherwise use the value we were passed. */
+ origdev = strdup(getCurrentFloppyDevice());
setFloppyDevice(flags);
+ if (strcmp(origdev, getCurrentFloppyDevice()))
+ usedev = getCurrentFloppyDevice();
+ else
+ usedev = device;
+ free(origdev);
- ddi->device = strdup(device);
- ddi->mntDevice = malloc(strlen(device) + 10);
- sprintf(ddi->mntDevice, "/tmp/%s", device);
+ ddi->device = strdup(usedev);
+ ddi->mntDevice = malloc(strlen(usedev) + 10);
+ sprintf(ddi->mntDevice, "/tmp/%s", usedev);
devMakeInode(ddi->device, ddi->mntDevice);