From 2974f2c0776a3fb5d8482d60a67cf496369ea771 Mon Sep 17 00:00:00 2001 From: "Jordan K. Hubbard" Date: Thu, 16 Jan 1997 14:42:21 +0000 Subject: [PATCH] Cope with Open_Disk() failure much more gracefully. --- release/sysinstall/disks.c | 18 ++++++++++-------- usr.sbin/sade/disks.c | 18 ++++++++++-------- usr.sbin/sysinstall/disks.c | 18 ++++++++++-------- 3 files changed, 30 insertions(+), 24 deletions(-) diff --git a/release/sysinstall/disks.c b/release/sysinstall/disks.c index fb66e3a1387f..b4f09009619f 100644 --- a/release/sysinstall/disks.c +++ b/release/sysinstall/disks.c @@ -189,7 +189,8 @@ diskPartition(Device *dev, Disk *d) char *val, geometry[80]; /* Now print our overall state */ - print_chunks(d); + if (d) + print_chunks(d); print_command_summary(); if (msg) { attrset(title_attr); mvprintw(23, 0, msg); attrset(A_NORMAL); @@ -357,17 +358,18 @@ diskPartition(Device *dev, Disk *d) "can't undo it."); } else if (!msgYesNo("Are you SURE you want to Undo everything?")) { - d = Open_Disk(d->name); - if (!d) { - msgConfirm("Can't reopen disk %s! Internal state is probably corrupted", d->name); - clear(); - break; - } + char cp[BUFSIZ]; + + sstrncpy(cp, d->name, sizeof cp); Free_Disk(dev->private); + d = Open_Disk(cp); + if (!d) + msgConfirm("Can't reopen disk %s! Internal state is probably corrupted", cp); dev->private = d; variable_unset(DISK_PARTITIONED); variable_unset(DISK_LABELLED); - record_chunks(d); + if (d) + record_chunks(d); } clear(); break; diff --git a/usr.sbin/sade/disks.c b/usr.sbin/sade/disks.c index fb66e3a1387f..b4f09009619f 100644 --- a/usr.sbin/sade/disks.c +++ b/usr.sbin/sade/disks.c @@ -189,7 +189,8 @@ diskPartition(Device *dev, Disk *d) char *val, geometry[80]; /* Now print our overall state */ - print_chunks(d); + if (d) + print_chunks(d); print_command_summary(); if (msg) { attrset(title_attr); mvprintw(23, 0, msg); attrset(A_NORMAL); @@ -357,17 +358,18 @@ diskPartition(Device *dev, Disk *d) "can't undo it."); } else if (!msgYesNo("Are you SURE you want to Undo everything?")) { - d = Open_Disk(d->name); - if (!d) { - msgConfirm("Can't reopen disk %s! Internal state is probably corrupted", d->name); - clear(); - break; - } + char cp[BUFSIZ]; + + sstrncpy(cp, d->name, sizeof cp); Free_Disk(dev->private); + d = Open_Disk(cp); + if (!d) + msgConfirm("Can't reopen disk %s! Internal state is probably corrupted", cp); dev->private = d; variable_unset(DISK_PARTITIONED); variable_unset(DISK_LABELLED); - record_chunks(d); + if (d) + record_chunks(d); } clear(); break; diff --git a/usr.sbin/sysinstall/disks.c b/usr.sbin/sysinstall/disks.c index fb66e3a1387f..b4f09009619f 100644 --- a/usr.sbin/sysinstall/disks.c +++ b/usr.sbin/sysinstall/disks.c @@ -189,7 +189,8 @@ diskPartition(Device *dev, Disk *d) char *val, geometry[80]; /* Now print our overall state */ - print_chunks(d); + if (d) + print_chunks(d); print_command_summary(); if (msg) { attrset(title_attr); mvprintw(23, 0, msg); attrset(A_NORMAL); @@ -357,17 +358,18 @@ diskPartition(Device *dev, Disk *d) "can't undo it."); } else if (!msgYesNo("Are you SURE you want to Undo everything?")) { - d = Open_Disk(d->name); - if (!d) { - msgConfirm("Can't reopen disk %s! Internal state is probably corrupted", d->name); - clear(); - break; - } + char cp[BUFSIZ]; + + sstrncpy(cp, d->name, sizeof cp); Free_Disk(dev->private); + d = Open_Disk(cp); + if (!d) + msgConfirm("Can't reopen disk %s! Internal state is probably corrupted", cp); dev->private = d; variable_unset(DISK_PARTITIONED); variable_unset(DISK_LABELLED); - record_chunks(d); + if (d) + record_chunks(d); } clear(); break;