diff options
-rw-r--r-- | mdk-stage1/disk.c | 60 |
1 files changed, 58 insertions, 2 deletions
diff --git a/mdk-stage1/disk.c b/mdk-stage1/disk.c index 331767226..bcf642642 100644 --- a/mdk-stage1/disk.c +++ b/mdk-stage1/disk.c @@ -201,7 +201,7 @@ static int try_mount(char * dev, char * location) static enum return_type try_with_device(char *dev_name) { - char * questions_location[] = { "Directory or ISO image", NULL }; + char * questions_location[] = { "Directory or ISO images directory or ISO image", NULL }; char * questions_location_auto[] = { "directory", NULL }; static char ** answers_location = NULL; char location_full[500]; @@ -232,7 +232,7 @@ static enum return_type try_with_device(char *dev_name) if (results != RETURN_OK) return results; } - + if (try_mount(choice, disk_own_mount)) { stg1_error_message("I can't find a valid filesystem (tried: ext2, vfat, ntfs, reiserfs)."); return try_with_device(dev_name); @@ -258,6 +258,62 @@ static enum return_type try_with_device(char *dev_name) unlink(IMAGE_LOCATION); +#ifndef MANDRAKE_MOVE + if (!stat(location_full, &statbuf) && S_ISDIR(statbuf.st_mode)) { + char **file; + char *stage2_isos[100]; + int stage2_iso_number = 0; + + log_message("\"%s\" exists and is a directory, looking for iso files", location_full); + + for (file = list_directory(location_full); *file; file++) { + char isofile[500], install_location[600]; + + if (strstr(*file, ".iso") != *file + strlen(*file) - 4) + /* file doesn't end in .iso, skipping */ + continue; + + strcpy(isofile, location_full); + strcat(isofile, "/"); + strcat(isofile, *file); + + if (lomount(isofile, IMAGE_LOCATION, &loopdev, 0)) { + log_message("unable to mount iso file \"%s\", skipping", isofile); + continue; + } + + strcpy(install_location, IMAGE_LOCATION); + + if (IS_SPECIAL_STAGE2 || ramdisk_possible()) + strcat(install_location, get_ramdisk_realname()); /* RAMDISK install */ + else + strcat(install_location, LIVE_LOCATION); /* LIVE install */ + + if (access(install_location, R_OK)) { + log_message("ISO image \"%s\" doesn't contain stage2 installer", isofile); + } else { + log_message("stage2 installer found in ISO image is \"%s\"", isofile); + stage2_isos[stage2_iso_number++] = strdup(*file); + } + + umount(IMAGE_LOCATION); + } + + stage2_isos[stage2_iso_number] = NULL; + + if (stage2_iso_number > 0) { + results = ask_from_list("Please choose the ISO image to be used to install the " DISTRIB_NAME " Distribution, or cancel to use as a mirrored directory", stage2_isos, file); + if (results == RETURN_OK) { + strcat(location_full, "/"); + strcat(location_full, *file); + log_message("installer will use ISO image \"%s\"", location_full); + } + } else { + log_message("no ISO image found in \"%s\" directory", location_full); + } + } +#endif + if (!stat(location_full, &statbuf) && !S_ISDIR(statbuf.st_mode)) { log_message("%s exists and is not a directory, assuming this is an ISO image", location_full); if (lomount(location_full, IMAGE_LOCATION, &loopdev, 0)) { |