diff options
Diffstat (limited to 'mdk-stage1/cdrom.c')
| -rw-r--r-- | mdk-stage1/cdrom.c | 65 | 
1 files changed, 38 insertions, 27 deletions
| diff --git a/mdk-stage1/cdrom.c b/mdk-stage1/cdrom.c index ef762a3c3..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,16 +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; +	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]); @@ -154,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); @@ -167,13 +178,13 @@ enum return_type cdrom_prepare(void)          }  	if (count == 0) { -                if (!already_probed_ide_generic) { -                        already_probed_ide_generic = 1; -                        my_insmod("ide-generic", ANY_DRIVER_TYPE, NULL, 0); -                        return cdrom_prepare(); -                } +		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(); @@ -183,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(); @@ -208,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(); | 
