summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Lumens <clumens@redhat.com>2011-02-11 11:40:06 -0500
committerChris Lumens <clumens@redhat.com>2011-02-14 14:47:00 -0500
commit844172c79fa66ec3dfef48e1fb7ee0f2ee68b3bd (patch)
tree8c2476689cacfd322c1307e22b5907d292532ea2
parent9e16f23baad674dfea7e4c0dc2cba7e946e5f6cb (diff)
downloadanaconda-844172c79fa66ec3dfef48e1fb7ee0f2ee68b3bd.tar.gz
anaconda-844172c79fa66ec3dfef48e1fb7ee0f2ee68b3bd.tar.xz
anaconda-844172c79fa66ec3dfef48e1fb7ee0f2ee68b3bd.zip
Prompt for media check on DVD installs (#676551).
-rw-r--r--loader/cdinstall.c27
-rw-r--r--loader/cdinstall.h1
-rw-r--r--loader/loader.c1
3 files changed, 15 insertions, 14 deletions
diff --git a/loader/cdinstall.c b/loader/cdinstall.c
index 161def738..e1e5fe78f 100644
--- a/loader/cdinstall.c
+++ b/loader/cdinstall.c
@@ -191,13 +191,18 @@ static void wrongCDMessage(void) {
}
/* ask about doing media check */
-static void queryCDMediaCheck(char *dev) {
+void queryCDMediaCheck(char *instRepo) {
int rc;
+ char *tmp, *device;
/* dont bother to test in automated installs */
if (FL_KICKSTART(flags) && !FL_MEDIACHECK(flags))
return;
+ /* Skip over the leading "cdrom://". */
+ tmp = instRepo+8;
+ checked_asprintf(&device, "%.*s", (int) (strchr(tmp, ':')-tmp), tmp);
+
/* see if we should check image(s) */
/* in rescue mode only test if they explicitly asked to */
if (!FL_RESCUE(flags) || FL_MEDIACHECK(flags)) {
@@ -213,18 +218,18 @@ static void queryCDMediaCheck(char *dev) {
* remount to pretend nothing ever happened.
*/
umount("/mnt/source");
- mediaCheckCdrom(dev);
+ mediaCheckCdrom(device);
do {
- if (doPwMount(dev, "/mnt/source", "iso9660", "ro", NULL)) {
- ejectCdrom(dev);
+ if (doPwMount(device, "/mnt/source", "iso9660", "ro", NULL)) {
+ ejectCdrom(device);
wrongCDMessage();
continue;
}
if (access("/mnt/source/.discinfo", R_OK)) {
umount("/mnt/source");
- ejectCdrom(dev);
+ ejectCdrom(device);
wrongCDMessage();
continue;
}
@@ -233,6 +238,8 @@ static void queryCDMediaCheck(char *dev) {
} while (1);
}
}
+
+ free(device);
}
int findInstallCD(struct loaderData_s *loaderData) {
@@ -314,20 +321,12 @@ int findInstallCD(struct loaderData_s *loaderData) {
int promptForCdrom(struct loaderData_s *loaderData) {
int rc;
- char *cddev = NULL, *colon, *start;
do {
rc = findInstallCD(loaderData);
if (loaderData->instRepo && rc == LOADER_OK) {
- /* Skip over the leading cdrom:// */
- start = loaderData->instRepo+8;
- colon = strchr(start, ':');
-
- /* Then grab just the device portion out of the instRepo string. */
- cddev = strndup(start, colon-start);
- queryCDMediaCheck(cddev);
- free(cddev);
+ queryCDMediaCheck(loaderData->instRepo);
return rc;
} else {
char * buf;
diff --git a/loader/cdinstall.h b/loader/cdinstall.h
index 6666b03e3..f883e7ab1 100644
--- a/loader/cdinstall.h
+++ b/loader/cdinstall.h
@@ -25,6 +25,7 @@
int findInstallCD(struct loaderData_s *loaderData);
int promptForCdrom(struct loaderData_s *loaderData);
int loadCdromImages(struct loaderData_s *loaderData);
+void queryCDMediaCheck(char *instRepo);
int kickstartFromCD(char *kssrc);
#endif
diff --git a/loader/loader.c b/loader/loader.c
index 644c1e879..dcdedc92f 100644
--- a/loader/loader.c
+++ b/loader/loader.c
@@ -1284,6 +1284,7 @@ static void doLoaderMain(struct loaderData_s *loaderData,
*/
if (!FL_ASKMETHOD(flags) && !loaderData->instRepo && findInstallCD(loaderData) == LOADER_OK) {
logMessage(DEBUGLVL, "Found installation media, so skipping lang and kbd");
+ queryCDMediaCheck(loaderData->instRepo);
skipLangKbd = 1;
flags |= LOADER_FLAGS_NOPASS;
}