summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/cdrom.c
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1/cdrom.c')
-rw-r--r--mdk-stage1/cdrom.c59
1 files changed, 38 insertions, 21 deletions
diff --git a/mdk-stage1/cdrom.c b/mdk-stage1/cdrom.c
index ff8c8d403..71db1da16 100644
--- a/mdk-stage1/cdrom.c
+++ b/mdk-stage1/cdrom.c
@@ -1,7 +1,7 @@
/*
- * Guillaume Cottenceau (gc@mandrakesoft.com)
+ * Guillaume Cottenceau (gc)
*
- * Copyright 2000 Mandrakesoft
+ * Copyright 2000 Mandriva
*
* This software may be freely redistributed under the terms of the GNU
* public license.
@@ -30,6 +30,8 @@
#include "probing.h"
#include "log.h"
#include "mount.h"
+#include "tools.h"
+#include "utils.h"
#include "cdrom.h"
@@ -37,15 +39,15 @@
static int mount_that_cd_device(char * dev_name)
{
char device_fullname[50];
+ int mount_result;
- strcpy(device_fullname, "/dev/");
- strcat(device_fullname, dev_name);
+ snprintf(device_fullname, sizeof(device_fullname), "/dev/%s", dev_name);
-#ifdef MANDRAKE_MOVE
- return my_mount(device_fullname, IMAGE_LOCATION, "supermount", 0);
-#else
- return my_mount(device_fullname, IMAGE_LOCATION, "iso9660", 0);
-#endif
+ mount_result = my_mount(device_fullname, MEDIA_LOCATION, "iso9660", 0);
+
+ create_IMAGE_LOCATION(MEDIA_LOCATION);
+
+ return mount_result;
}
@@ -55,7 +57,7 @@ static enum return_type do_with_device(char * dev_name, char * dev_model)
{
if (!image_has_stage2()) {
enum return_type results;
- umount(IMAGE_LOCATION);
+ umount(MEDIA_LOCATION);
results = ask_yes_no("That CDROM disc does not seem to be a " DISTRIB_NAME " Installation CDROM.\nRetry with another disc?");
if (results == RETURN_OK)
return try_with_device(dev_name, dev_model);
@@ -64,13 +66,11 @@ static enum return_type do_with_device(char * dev_name, char * dev_model)
log_message("found a " DISTRIB_NAME " CDROM, good news!");
-#ifndef MANDRAKE_MOVE
- may_load_clp();
+ may_load_compressed_image();
if (!KEEP_MOUNTED)
/* in rescue mode, we don't need the media anymore */
- umount(IMAGE_LOCATION);
-#endif
+ umount(MEDIA_LOCATION);
add_to_env("METHOD", "cdrom");
return RETURN_OK;
@@ -118,7 +118,7 @@ int try_automatic(char ** medias, char ** medias_models)
return i;
}
else
- umount(IMAGE_LOCATION);
+ umount(MEDIA_LOCATION);
}
remove_wait_message();
@@ -136,15 +136,20 @@ enum return_type cdrom_prepare(void)
char * choice;
int i, count = 0;
enum return_type results;
+ static int already_probed_ide_generic = 0;
- my_insmod("ide-cd", ANY_DRIVER_TYPE, NULL, 0);
+ my_modprobe("ide_cd_mod", ANY_DRIVER_TYPE, NULL);
if (IS_AUTOMATIC) {
get_medias(CDROM, &medias, &medias_models, BUS_IDE);
if ((i = try_automatic(medias, medias_models)) != -1)
return do_with_device(medias[i], medias_models[i]);
- my_insmod("sr_mod", ANY_DRIVER_TYPE, NULL, 0);
+ get_medias(CDROM, &medias, &medias_models, BUS_PCMCIA);
+ if ((i = try_automatic(medias, medias_models)) != -1)
+ return do_with_device(medias[i], medias_models[i]);
+
+ my_modprobe("sr_mod", ANY_DRIVER_TYPE, NULL);
get_medias(CDROM, &medias, &medias_models, BUS_SCSI);
if ((i = try_automatic(medias, medias_models)) != -1)
return do_with_device(medias[i], medias_models[i]);
@@ -153,9 +158,16 @@ enum return_type cdrom_prepare(void)
if ((i = try_automatic(medias, medias_models)) != -1)
return do_with_device(medias[i], medias_models[i]);
+ /* detect hybrid isos (isos dumped to an USB stick) */
+ my_modprobe("sd_mod", ANY_DRIVER_TYPE, NULL);
+ get_medias(DISK, &medias, &medias_models, BUS_USB);
+ if ((i = try_automatic(medias, medias_models)) != -1) {
+ return do_with_device(medias[i], medias_models[i]);
+ }
+
unset_automatic();
} else
- my_insmod("sr_mod", ANY_DRIVER_TYPE, NULL, 0);
+ my_modprobe("sr_mod", ANY_DRIVER_TYPE, NULL);
get_medias(CDROM, &medias, &medias_models, BUS_ANY);
@@ -166,8 +178,13 @@ enum return_type cdrom_prepare(void)
}
if (count == 0) {
+ if (!already_probed_ide_generic) {
+ already_probed_ide_generic = 1;
+ my_modprobe("ide_generic", ANY_DRIVER_TYPE, NULL);
+ return cdrom_prepare();
+ }
stg1_error_message("No CDROM device found.");
- i = ask_insmod(SCSI_ADAPTERS);
+ i = ask_insmod(MEDIA_ADAPTERS);
if (i == RETURN_BACK)
return RETURN_BACK;
return cdrom_prepare();
@@ -177,7 +194,7 @@ enum return_type cdrom_prepare(void)
results = try_with_device(*medias, *medias_models);
if (results == RETURN_OK)
return RETURN_OK;
- i = ask_insmod(SCSI_ADAPTERS);
+ i = ask_insmod(MEDIA_ADAPTERS);
if (i == RETURN_BACK)
return RETURN_BACK;
return cdrom_prepare();
@@ -202,7 +219,7 @@ enum return_type cdrom_prepare(void)
if (results == RETURN_BACK)
return cdrom_prepare();
- i = ask_insmod(SCSI_ADAPTERS);
+ i = ask_insmod(MEDIA_ADAPTERS);
if (i == RETURN_BACK)
return RETURN_BACK;
return cdrom_prepare();