diff options
author | jkh <jkh@FreeBSD.org> | 1997-01-15 06:30:50 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1997-01-15 06:30:50 +0000 |
commit | 0a45d47c6d7181202cb56c9f539c4c9d7d7f9db9 (patch) | |
tree | 29e7b8dbd6d713f6ae21cbd62c9ecfa9c1abbf3e /usr.sbin/sade | |
parent | 754b3824315ef8a747c71d481aa623198b4a86e5 (diff) | |
download | FreeBSD-src-0a45d47c6d7181202cb56c9f539c4c9d7d7f9db9.zip FreeBSD-src-0a45d47c6d7181202cb56c9f539c4c9d7d7f9db9.tar.gz |
Make the FTP installation codepath a lot more defensive. Trap
bogus path and FTP I/O errors much earlier, offer retry possibilities
at steps along the way so you don't have to resume from the very beginning
again on a hard error.
Diffstat (limited to 'usr.sbin/sade')
-rw-r--r-- | usr.sbin/sade/install.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/usr.sbin/sade/install.c b/usr.sbin/sade/install.c index 15059e8..0b44fcc 100644 --- a/usr.sbin/sade/install.c +++ b/usr.sbin/sade/install.c @@ -502,7 +502,7 @@ installNovice(dialogMenuItem *self) break; } - if (!mediaDevice && !dmenuOpenSimple(&MenuMedia, FALSE)) + if (!mediaDevice && (!dmenuOpenSimple(&MenuMedia, FALSE) || !mediaDevice)) return DITEM_FAILURE | DITEM_RECREATE; if (DITEM_STATUS((i = installCommit(self))) == DITEM_FAILURE) { @@ -664,8 +664,31 @@ installCommit(dialogMenuItem *self) char *str; Boolean need_bin = FALSE; - if (!mediaVerify()) - return DITEM_FAILURE; + if (!Dists) { + if (!msgYesNo("No distributions are selected for installation! Do you\n" + "want to do this now?")) { + if (!dmenuOpenSimple(&MenuDistributions, FALSE) && !Dists) + return DITEM_FAILURE | DITEM_RECREATE; + } + else + return DITEM_FAILURE | DITEM_RESTORE; + } + + if (!mediaDevice && !msgYesNo("You need to select a media type first. Do you want\n" + "to do this now?")) { + if (!dmenuOpenSimple(&MenuMedia, FALSE) || !mediaDevice) + return DITEM_FAILURE | DITEM_RESTORE; + } + + if (!mediaDevice->init(mediaDevice)) { + if (!msgYesNo("Unable to initialize selected media. Would you like to\n" + "adjust your media configuration?")) { + if (!dmenuOpenSimple(&MenuMedia, FALSE) || !mediaDevice) + return DITEM_FAILURE | DITEM_RESTORE; + } + else + return DITEM_FAILURE | DITEM_RESTORE; + } str = variable_get(SYSTEM_STATE); if (isDebug()) @@ -682,9 +705,10 @@ installCommit(dialogMenuItem *self) if (Dists & DIST_BIN) need_bin = TRUE; i = distExtractAll(self); - if (DITEM_STATUS(i) != DITEM_FAILURE || !need_bin || !(Dists & DIST_BIN)) - i = installFixup(self); - + if (DITEM_STATUS(i) == DITEM_SUCCESS) { + if (!need_bin || !(Dists & DIST_BIN)) + i = installFixup(self); + } variable_set2(SYSTEM_STATE, DITEM_STATUS(i) == DITEM_FAILURE ? "error-install" : "full-install"); return i | DITEM_RECREATE; } |