summaryrefslogtreecommitdiffstats
path: root/mdk-stage1
diff options
context:
space:
mode:
Diffstat (limited to 'mdk-stage1')
-rw-r--r--mdk-stage1/cdrom.c72
1 files changed, 52 insertions, 20 deletions
diff --git a/mdk-stage1/cdrom.c b/mdk-stage1/cdrom.c
index 015151c4d..f05bc0341 100644
--- a/mdk-stage1/cdrom.c
+++ b/mdk-stage1/cdrom.c
@@ -34,31 +34,28 @@
#include "cdrom.h"
-
-static enum return_type try_with_device(char *dev_name, char * dev_model)
+static int mount_that_cd_device(char * dev_name)
{
char device_fullname[50];
strcpy(device_fullname, "/dev/");
strcat(device_fullname, dev_name);
- wait_message("Trying to access a CDROM disc (drive %s)", dev_model);
+ return my_mount(device_fullname, IMAGE_LOCATION, "iso9660");
+}
- if (my_mount(device_fullname, IMAGE_LOCATION, "iso9660") == -1) {
- enum return_type results;
- char msg[500];
- unset_param(MODE_AUTOMATIC); /* we are in a fallback mode */
- remove_wait_message();
- snprintf(msg, sizeof(msg), "I can't access a " DISTRIB_NAME " Installation disc in your CDROM drive (%s).\nRetry?", dev_model);
- results = ask_yes_no(msg);
- if (results == RETURN_OK)
- return try_with_device(dev_name, dev_model);
- return results;
- }
- remove_wait_message();
+static int test_that_cd()
+{
+ return access(IMAGE_LOCATION LIVE_LOCATION, R_OK);
+}
+
+
+static enum return_type try_with_device(char * dev_name, char * dev_model);
- if (access(IMAGE_LOCATION LIVE_LOCATION, R_OK)) {
+static enum return_type do_with_device(char * dev_name, char * dev_model)
+{
+ if (test_that_cd()) {
enum return_type results;
umount(IMAGE_LOCATION);
results = ask_yes_no("That CDROM disc does not seem to be a " DISTRIB_NAME " Installation CDROM.\nRetry with another disc?");
@@ -77,6 +74,27 @@ static enum return_type try_with_device(char *dev_name, char * dev_model)
method_name = strdup("cdrom");
return RETURN_OK;
+}
+
+static enum return_type try_with_device(char * dev_name, char * dev_model)
+{
+ wait_message("Trying to access a CDROM disc (drive %s)", dev_model);
+
+ if (mount_that_cd_device(dev_name) == -1) {
+ enum return_type results;
+ char msg[500];
+ unset_param(MODE_AUTOMATIC); /* we are in a fallback mode */
+ remove_wait_message();
+
+ snprintf(msg, sizeof(msg), "I can't access a " DISTRIB_NAME " Installation disc in your CDROM drive (%s).\nRetry?", dev_model);
+ results = ask_yes_no(msg);
+ if (results == RETURN_OK)
+ return try_with_device(dev_name, dev_model);
+ return results;
+ }
+ remove_wait_message();
+
+ return do_with_device(dev_name, dev_model);
}
enum return_type cdrom_prepare(void)
@@ -116,10 +134,24 @@ enum return_type cdrom_prepare(void)
}
if (IS_AUTOMATIC) {
- results = try_with_device(*medias, *medias_models);
- if (results != RETURN_OK)
- unset_param(MODE_AUTOMATIC);
- return results;
+ char ** model = medias_models;
+ ptr = medias;
+ while (ptr && *ptr) {
+ wait_message("Trying to access " DISTRIB_NAME " CDROM disc (drive %s)", *model);
+ if (mount_that_cd_device(*ptr) != -1) {
+ if (!test_that_cd()) {
+ remove_wait_message();
+ return do_with_device(*ptr, *model);
+ }
+ else
+ umount(IMAGE_LOCATION);
+ }
+ remove_wait_message();
+ ptr++;
+ model++;
+ }
+ unset_param(MODE_AUTOMATIC);
+ return cdrom_prepare();
}
else {
results = ask_from_list_comments("Please choose the CDROM drive to use for the installation.", medias, medias_models, &choice);