diff options
author | jkh <jkh@FreeBSD.org> | 1995-05-28 20:28:15 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1995-05-28 20:28:15 +0000 |
commit | 3e10e5e8e29cd554d9c1e381f5c2fdba6c37fd05 (patch) | |
tree | c11d33606637260c1feea9de3c5031eb61a4e655 | |
parent | e74ca0f997a2cdc6719dfd635a04d1872eb11320 (diff) | |
download | FreeBSD-src-3e10e5e8e29cd554d9c1e381f5c2fdba6c37fd05.zip FreeBSD-src-3e10e5e8e29cd554d9c1e381f5c2fdba6c37fd05.tar.gz |
Fix bogon I introduced into dist extraction code last night.
Update to Poul's latest gripe list fixes.
-rw-r--r-- | release/sysinstall/config.c | 4 | ||||
-rw-r--r-- | release/sysinstall/disks.c | 4 | ||||
-rw-r--r-- | release/sysinstall/dist.c | 21 | ||||
-rw-r--r-- | release/sysinstall/install.c | 23 | ||||
-rw-r--r-- | release/sysinstall/label.c | 76 | ||||
-rw-r--r-- | usr.sbin/sade/config.c | 4 | ||||
-rw-r--r-- | usr.sbin/sade/disks.c | 4 | ||||
-rw-r--r-- | usr.sbin/sade/install.c | 23 | ||||
-rw-r--r-- | usr.sbin/sade/label.c | 76 | ||||
-rw-r--r-- | usr.sbin/sysinstall/config.c | 4 | ||||
-rw-r--r-- | usr.sbin/sysinstall/disks.c | 4 | ||||
-rw-r--r-- | usr.sbin/sysinstall/dist.c | 21 | ||||
-rw-r--r-- | usr.sbin/sysinstall/install.c | 23 | ||||
-rw-r--r-- | usr.sbin/sysinstall/label.c | 76 |
14 files changed, 163 insertions, 200 deletions
diff --git a/release/sysinstall/config.c b/release/sysinstall/config.c index 14401b4..c791550 100644 --- a/release/sysinstall/config.c +++ b/release/sysinstall/config.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: config.c,v 1.10 1995/05/26 20:55:11 jkh Exp $ + * $Id: config.c,v 1.11 1995/05/28 09:31:29 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -113,6 +113,8 @@ fstype_short(Chunk *c1) else return "sw"; } + else if (c1->type == fat) + return "rw"; return "bog"; } diff --git a/release/sysinstall/disks.c b/release/sysinstall/disks.c index cae942e..35a3e0e 100644 --- a/release/sysinstall/disks.c +++ b/release/sysinstall/disks.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: disks.c,v 1.27 1995/05/22 14:10:12 jkh Exp $ + * $Id: disks.c,v 1.28 1995/05/25 18:48:23 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -109,7 +109,7 @@ print_command_summary() mvprintw(14, 0, "The following commands are supported (in upper or lower case):"); mvprintw(16, 0, "A = Use Entire Disk B = Bad Block Scan C = Create Partition"); mvprintw(17, 0, "D = Delete Partition G = Set BIOS Geometry S = Set Bootable"); - mvprintw(18, 0, "U = Undo All Changes W = `Wizard' Mode ESC = Exit this screen"); + mvprintw(18, 0, "U = Undo All Changes ESC = Exit this screen"); mvprintw(20, 0, "The currently selected partition is displayed in "); attrset(A_REVERSE); addstr("reverse"); attrset(A_NORMAL); addstr(" video."); mvprintw(21, 0, "Use F1 or ? to get more help, arrow keys to move."); diff --git a/release/sysinstall/dist.c b/release/sysinstall/dist.c index a7ed7b8..fe809bb 100644 --- a/release/sysinstall/dist.c +++ b/release/sysinstall/dist.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: dist.c,v 1.29 1995/05/28 07:05:21 phk Exp $ + * $Id: dist.c,v 1.30 1995/05/28 09:43:36 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -147,11 +147,11 @@ static Distribution DistTable[] = { { "manpages", "/", &Dists, DIST_MANPAGES, NULL }, { "proflibs", "/", &Dists, DIST_PROFLIBS, NULL }, { "dict", "/", &Dists, DIST_DICT, NULL }, -{ "src/", "/", &Dists, DIST_SRC, SrcDistTable }, +{ "src", "/", &Dists, DIST_SRC, SrcDistTable }, { "des", "/", &Dists, DIST_DES, NULL }, { "compat1x", "/", &Dists, DIST_COMPAT1X, NULL }, { "compat20", "/", &Dists, DIST_COMPAT20, NULL }, -{ "XF86311/", "/usr", &Dists, DIST_XF86, XF86DistTable }, +{ "XF86311", "/usr", &Dists, DIST_XF86, XF86DistTable }, { NULL }, }; @@ -171,7 +171,8 @@ static Distribution SrcDistTable[] = { { "ssys", "/usr/src", &SrcDists, DIST_SRC_SYS, NULL }, { "subin", "/usr/src", &SrcDists, DIST_SRC_UBIN, NULL }, { "susbin", "/usr/src", &SrcDists, DIST_SRC_USBIN, NULL }, -{ "xf86", "/usr/X11R6/src", &SrcDists, DIST_SRC_XF86, NULL }, +{ "XF86-xc", "/usr/X11R6/src", &SrcDists, DIST_SRC_XF86, NULL }, +{ "XF86-co", "/usr/X11R6/src", &SrcDists, DIST_SRC_XF86, NULL }, { NULL }, }; @@ -180,7 +181,7 @@ static Distribution XF86DistTable[] = { { "X311bin", "/usr", &XF86Dists, DIST_XF86_BIN, NULL }, { "X311lib", "/usr", &XF86Dists, DIST_XF86_LIB, NULL }, { "X311doc", "/usr", &XF86Dists, DIST_XF86_DOC, NULL }, -{ "Xf86311/", "/usr", &XF86Dists, DIST_XF86_FONTS, XF86FontDistTable }, +{ "Xf86311", "/usr", &XF86Dists, DIST_XF86_FONTS, XF86FontDistTable }, { "X311man", "/usr", &XF86Dists, DIST_XF86_MAN, NULL }, { "X311prog", "/usr", &XF86Dists, DIST_XF86_PROG, NULL }, { "X311link", "/usr", &XF86Dists, DIST_XF86_LINK, NULL }, @@ -188,7 +189,7 @@ static Distribution XF86DistTable[] = { { "X311lbx", "/usr", &XF86Dists, DIST_XF86_LBX, NULL }, { "X311xicf", "/usr", &XF86Dists, DIST_XF86_XINIT, NULL }, { "X311xdmcf", "/usr", &XF86Dists, DIST_XF86_XDMCF, NULL }, -{ "Xf86311/", "/usr", &XF86Dists, DIST_XF86_SERVER, XF86ServerDistTable }, +{ "Xf86311", "/usr", &XF86Dists, DIST_XF86_SERVER, XF86ServerDistTable }, { NULL }, }; @@ -246,7 +247,7 @@ distExtract(char *parent, Distribution *me) dist = me[i].my_name; path = parent ? parent : me[i].my_name; - snprintf(buf, 512, "%s%s.tgz", path, dist); + snprintf(buf, 512, "%s/%s.tgz", path, dist); fd = (*mediaDevice->get)(buf); if (fd != -1) { status = mediaExtractDist(me[i].my_name, me[i].my_dir, fd); @@ -257,7 +258,7 @@ distExtract(char *parent, Distribution *me) goto done; } - snprintf(buf, sizeof buf, "/stand/info/%s%s.inf", path, dist); + snprintf(buf, sizeof buf, "/stand/info/%s/%s.inf", path, dist); if (!access(buf, R_OK)) { msgDebug("Parsing attributes file for %s\n", dist); dist_attr = safe_malloc(sizeof(Attribs) * MAX_ATTRIBS); @@ -279,7 +280,7 @@ distExtract(char *parent, Distribution *me) msgDebug("Attempting to extract distribution from %u chunks.\n", numchunks); if (numchunks < 2 ) { - snprintf(buf, 512, "%s%s", path, dist); + snprintf(buf, 512, "%s/%s", path, dist); if (numchunks) strcat(buf,".aa"); fd = (*mediaDevice->get)(buf); @@ -299,7 +300,7 @@ distExtract(char *parent, Distribution *me) for (chunk = 0; chunk < numchunks; chunk++) { int n, retval; - snprintf(buf, 512, "%s%s.%c%c", path, dist, (chunk / 26) + 'a', (chunk % 26) + 'a'); + snprintf(buf, 512, "%s/%s.%c%c", path, dist, (chunk / 26) + 'a', (chunk % 26) + 'a'); fd = (*mediaDevice->get)(buf); if (fd < 0) { msgConfirm("failed to retreive piece file %s!\nAborting the transfer", buf); diff --git a/release/sysinstall/install.c b/release/sysinstall/install.c index 060f118..381e09a 100644 --- a/release/sysinstall/install.c +++ b/release/sysinstall/install.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: install.c,v 1.62 1995/05/27 23:39:30 phk Exp $ + * $Id: install.c,v 1.63 1995/05/28 09:31:32 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -55,7 +55,6 @@ static void make_filesystems(void); static void copy_self(void); static void root_extract(void); -static Disk *rootdisk; static Chunk *rootdev; static Boolean @@ -78,9 +77,7 @@ checkLabels(void) for (c1 = disk->chunks->part; c1; c1 = c1->next) { if (c1->type == freebsd) { for (c2 = c1->part; c2; c2 = c2->next) { - if (c2->type == part && c2->subtype != FS_SWAP && - c2->private && c2->flags & CHUNK_IS_ROOT) { - rootdisk = disk; + if (c2->type == part && c2->subtype != FS_SWAP && c2->private && c2->flags & CHUNK_IS_ROOT) { rootdev = c2; break; } @@ -182,12 +179,10 @@ installInitial(void) msgNotify("Running bad block scan on partition %s", c1->name); ret = vsystem("bad144 -v /dev/r%s 1234", c1->name); if (ret) - msgConfirm("Bad144 init on %s returned status of %d!", - c1->name, ret); + msgConfirm("Bad144 init on %s returned status of %d!", c1->name, ret); ret = vsystem("bad144 -v -s /dev/r%s", c1->name); if (ret) - msgConfirm("Bad144 scan on %s returned status of %d!", - c1->name, ret); + msgConfirm("Bad144 scan on %s returned status of %d!", c1->name, ret); } } } @@ -198,6 +193,7 @@ installInitial(void) chdir("/"); variable_set2(RUNNING_ON_ROOT, "yes"); /* stick a helpful shell over on the 4th VTY */ + msgDebug("Sticking a potentially helpful shell over on the 4th screen\n"); if (!fork()) { int i, fd; @@ -277,7 +273,7 @@ make_filesystems(void) if (p->newfs) { int i; - sprintf(dname, "/dev/r%sa", rootdisk->name); + sprintf(dname, "/dev/r%sa", rootdev->disk->name); msgNotify("Making a new root filesystem on %s", dname); i = vsystem("%s %s", p->newfs_cmd, dname); if (i) { @@ -287,13 +283,13 @@ make_filesystems(void) } else { msgConfirm("Warning: You have selected a Read-Only root device\nand may be unable to find the appropriate device entries on it\nif it is from an older pre-slice version of FreeBSD."); - sprintf(dname, "/dev/r%sa", rootdisk->name); + sprintf(dname, "/dev/r%sa", rootdev->disk->name); msgNotify("Checking integrity of existing %s filesystem", dname); i = vsystem("fsck -y %s", dname); if (i) msgConfirm("Warning: fsck returned status off %d - this partition may be\nunsafe to use.", i); } - sprintf(dname, "/dev/%sa", rootdisk->name); + sprintf(dname, "/dev/%sa", rootdev->disk->name); if (Mount("/mnt", dname)) { msgConfirm("Unable to mount the root file system! Giving up."); return; @@ -313,6 +309,9 @@ make_filesystems(void) /* Now buzz through the rest of the partitions and mount them too */ for (i = 0; devs[i]; i++) { + if (!devs[i]->enabled) + continue; + disk = (Disk *)devs[i]->private; if (!disk->chunks) msgFatal("No chunk list found for %s!", disk->name); diff --git a/release/sysinstall/label.c b/release/sysinstall/label.c index 4bef6c8..fa95bfe 100644 --- a/release/sysinstall/label.c +++ b/release/sysinstall/label.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: label.c,v 1.26 1995/05/26 11:21:46 jkh Exp $ + * $Id: label.c,v 1.27 1995/05/28 09:31:34 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -79,8 +79,7 @@ check_conflict(char *name) int i; for (i = 0; label_chunk_info[i].c; i++) - if (label_chunk_info[i].type == PART_FILESYSTEM - && label_chunk_info[i].c->private + if (label_chunk_info[i].type == PART_FILESYSTEM && label_chunk_info[i].c->private && !strcmp(((PartInfo *)label_chunk_info[i].c->private)->mountpoint, name)) return TRUE; return FALSE; @@ -180,11 +179,10 @@ new_part(char *mpoint, Boolean newfs, u_long size) ret->newfs = newfs; if (!size) return ret; - for(target = size; target; target--) { - for(divisor = 4096 ; divisor > 1023; divisor--) { + for (target = size; target; target--) { + for (divisor = 4096 ; divisor > 1023; divisor--) { if (!(target % divisor)) { - sprintf(ret->newfs_cmd+strlen(ret->newfs_cmd), - " -u %ld",divisor); + sprintf(ret->newfs_cmd + strlen(ret->newfs_cmd), " -u %ld",divisor); return ret; } } @@ -351,19 +349,10 @@ print_label_chunks(void) memcpy(onestr + PART_PART_COL, label_chunk_info[i].c->name, strlen(label_chunk_info[i].c->name)); /* If it's a filesystem, display the mountpoint */ if (label_chunk_info[i].type == PART_FILESYSTEM || label_chunk_info[i].type == PART_FAT) { - if (label_chunk_info[i].c->private == NULL) { - static int mnt = 0; - char foo[10]; - - /* - * Hmm! A partition that must have already been here. - * Fill in a fake mountpoint and register it - */ - sprintf(foo, "/mnt%d", mnt++); - label_chunk_info[i].c->private = new_part(foo, FALSE, label_chunk_info[i].c->size); - label_chunk_info[i].c->private_free = safe_free; - } - mountpoint = ((PartInfo *)label_chunk_info[i].c->private)->mountpoint; + if (label_chunk_info[i].c->private != NULL) + mountpoint = ((PartInfo *)label_chunk_info[i].c->private)->mountpoint; + else + mountpoint = " "; if (label_chunk_info[i].type == PART_FAT) newfs = "DOS"; else @@ -394,10 +383,9 @@ print_label_chunks(void) static void print_command_summary() { - mvprintw(17, 0, - "The following commands are valid here (upper or lower case):"); - mvprintw(19, 0, "C = Create Partition D = Delete Partition M = Mount Partition"); - mvprintw(20, 0, "N = Newfs Options T = Toggle Newfs ESC = Exit this screen"); + mvprintw(17, 0, "The following commands are valid here (upper or lower case):"); + mvprintw(19, 0, "C = Create New D = Delete M = Set Mountpoint"); + mvprintw(20, 0, "N = Newfs Options T = Toggle Newfs U = Undo ESC = Exit"); mvprintw(21, 0, "The default target will be displayed in "); attrset(A_REVERSE); @@ -489,30 +477,23 @@ diskLabelEditor(char *str) char *val, *cp; int size; struct chunk *tmp; + char osize[80]; u_long flags = 0; - val = msgGetInput(NULL, "Please specify the size for new FreeBSD partition in blocks, or\nappend a trailing `M' for megabytes (e.g. 20M), `C' for cylinders\nor `%%' for a percentage of remaining space.\n\nSpace free is %d blocks (%dMB)", sz, sz / ONE_MEG); + sprintf(osize, "%d", sz); + val = msgGetInput(osize, "Please specify the size for new FreeBSD partition in blocks, or\nappend a trailing `M' for megabytes (e.g. 20M) or `C' for cylinders.\n\nSpace free is %d blocks (%dMB)", sz, sz / ONE_MEG); if (!val || (size = strtol(val, &cp, 0)) <= 0) break; - if (sz <= FS_MIN_SIZE) { - msgConfirm("The minimum filesystem size is %dMB", FS_MIN_SIZE / ONE_MEG); - break; - } if (*cp) { if (toupper(*cp) == 'M') size *= ONE_MEG; else if (toupper(*cp) == 'C') size *= (label_chunk_info[here].c->disk->bios_hd * label_chunk_info[here].c->disk->bios_sect); - else if (*cp == '%') { - float fsz, fsize; - - fsz = (float)sz; - fsize = (float)size; - fsize *= 0.10; - fsz *= fsize; - size = (int)fsz; - } + } + if (size <= FS_MIN_SIZE) { + msgConfirm("The minimum filesystem size is %dMB", FS_MIN_SIZE / ONE_MEG); + break; } type = get_partition_type(); if (type == PART_NONE) @@ -552,7 +533,8 @@ diskLabelEditor(char *str) } if (type != PART_SWAP) { /* This is needed to tell the newfs -u about the size */ - tmp->private = new_part(p->mountpoint,p->newfs,tmp->size); + tmp->private = new_part(p->mountpoint, p->newfs, tmp->size); + tmp->private_free = safe_free; safe_free(p); } else { tmp->private = p; @@ -617,18 +599,22 @@ diskLabelEditor(char *str) case 'T': /* Toggle newfs state */ if (label_chunk_info[here].type == PART_FILESYSTEM && label_chunk_info[here].c->private) { - PartInfo *pi = ((PartInfo *) - label_chunk_info[here].c->private); - label_chunk_info[here].c->private = new_part( - pi->mountpoint, - !pi->newfs, - label_chunk_info[here].c->size); + PartInfo *pi = ((PartInfo *)label_chunk_info[here].c->private); + label_chunk_info[here].c->private = new_part(pi->mountpoint, !pi->newfs, label_chunk_info[here].c->size); safe_free(pi); + label_chunk_info[here].c->private_free = safe_free; } else msg = MSG_NOT_APPLICABLE; break; + case 'U': + Free_Disk(label_chunk_info[here].c->disk); + label_chunk_info[here].c->disk = Open_Disk(label_chunk_info[here].c->disk->name); + if (!label_chunk_info[here].c->disk) + msgFatal("Can't reopen disk in undo!"); + record_label_chunks(); + case 'W': if (!msgYesNo("Are you sure you want to go into Wizard mode?\n\nThis is an entirely undocumented feature which you are not\nexpected to understand!")) { int i; diff --git a/usr.sbin/sade/config.c b/usr.sbin/sade/config.c index 14401b4..c791550 100644 --- a/usr.sbin/sade/config.c +++ b/usr.sbin/sade/config.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: config.c,v 1.10 1995/05/26 20:55:11 jkh Exp $ + * $Id: config.c,v 1.11 1995/05/28 09:31:29 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -113,6 +113,8 @@ fstype_short(Chunk *c1) else return "sw"; } + else if (c1->type == fat) + return "rw"; return "bog"; } diff --git a/usr.sbin/sade/disks.c b/usr.sbin/sade/disks.c index cae942e..35a3e0e 100644 --- a/usr.sbin/sade/disks.c +++ b/usr.sbin/sade/disks.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: disks.c,v 1.27 1995/05/22 14:10:12 jkh Exp $ + * $Id: disks.c,v 1.28 1995/05/25 18:48:23 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -109,7 +109,7 @@ print_command_summary() mvprintw(14, 0, "The following commands are supported (in upper or lower case):"); mvprintw(16, 0, "A = Use Entire Disk B = Bad Block Scan C = Create Partition"); mvprintw(17, 0, "D = Delete Partition G = Set BIOS Geometry S = Set Bootable"); - mvprintw(18, 0, "U = Undo All Changes W = `Wizard' Mode ESC = Exit this screen"); + mvprintw(18, 0, "U = Undo All Changes ESC = Exit this screen"); mvprintw(20, 0, "The currently selected partition is displayed in "); attrset(A_REVERSE); addstr("reverse"); attrset(A_NORMAL); addstr(" video."); mvprintw(21, 0, "Use F1 or ? to get more help, arrow keys to move."); diff --git a/usr.sbin/sade/install.c b/usr.sbin/sade/install.c index 060f118..381e09a 100644 --- a/usr.sbin/sade/install.c +++ b/usr.sbin/sade/install.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: install.c,v 1.62 1995/05/27 23:39:30 phk Exp $ + * $Id: install.c,v 1.63 1995/05/28 09:31:32 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -55,7 +55,6 @@ static void make_filesystems(void); static void copy_self(void); static void root_extract(void); -static Disk *rootdisk; static Chunk *rootdev; static Boolean @@ -78,9 +77,7 @@ checkLabels(void) for (c1 = disk->chunks->part; c1; c1 = c1->next) { if (c1->type == freebsd) { for (c2 = c1->part; c2; c2 = c2->next) { - if (c2->type == part && c2->subtype != FS_SWAP && - c2->private && c2->flags & CHUNK_IS_ROOT) { - rootdisk = disk; + if (c2->type == part && c2->subtype != FS_SWAP && c2->private && c2->flags & CHUNK_IS_ROOT) { rootdev = c2; break; } @@ -182,12 +179,10 @@ installInitial(void) msgNotify("Running bad block scan on partition %s", c1->name); ret = vsystem("bad144 -v /dev/r%s 1234", c1->name); if (ret) - msgConfirm("Bad144 init on %s returned status of %d!", - c1->name, ret); + msgConfirm("Bad144 init on %s returned status of %d!", c1->name, ret); ret = vsystem("bad144 -v -s /dev/r%s", c1->name); if (ret) - msgConfirm("Bad144 scan on %s returned status of %d!", - c1->name, ret); + msgConfirm("Bad144 scan on %s returned status of %d!", c1->name, ret); } } } @@ -198,6 +193,7 @@ installInitial(void) chdir("/"); variable_set2(RUNNING_ON_ROOT, "yes"); /* stick a helpful shell over on the 4th VTY */ + msgDebug("Sticking a potentially helpful shell over on the 4th screen\n"); if (!fork()) { int i, fd; @@ -277,7 +273,7 @@ make_filesystems(void) if (p->newfs) { int i; - sprintf(dname, "/dev/r%sa", rootdisk->name); + sprintf(dname, "/dev/r%sa", rootdev->disk->name); msgNotify("Making a new root filesystem on %s", dname); i = vsystem("%s %s", p->newfs_cmd, dname); if (i) { @@ -287,13 +283,13 @@ make_filesystems(void) } else { msgConfirm("Warning: You have selected a Read-Only root device\nand may be unable to find the appropriate device entries on it\nif it is from an older pre-slice version of FreeBSD."); - sprintf(dname, "/dev/r%sa", rootdisk->name); + sprintf(dname, "/dev/r%sa", rootdev->disk->name); msgNotify("Checking integrity of existing %s filesystem", dname); i = vsystem("fsck -y %s", dname); if (i) msgConfirm("Warning: fsck returned status off %d - this partition may be\nunsafe to use.", i); } - sprintf(dname, "/dev/%sa", rootdisk->name); + sprintf(dname, "/dev/%sa", rootdev->disk->name); if (Mount("/mnt", dname)) { msgConfirm("Unable to mount the root file system! Giving up."); return; @@ -313,6 +309,9 @@ make_filesystems(void) /* Now buzz through the rest of the partitions and mount them too */ for (i = 0; devs[i]; i++) { + if (!devs[i]->enabled) + continue; + disk = (Disk *)devs[i]->private; if (!disk->chunks) msgFatal("No chunk list found for %s!", disk->name); diff --git a/usr.sbin/sade/label.c b/usr.sbin/sade/label.c index 4bef6c8..fa95bfe 100644 --- a/usr.sbin/sade/label.c +++ b/usr.sbin/sade/label.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: label.c,v 1.26 1995/05/26 11:21:46 jkh Exp $ + * $Id: label.c,v 1.27 1995/05/28 09:31:34 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -79,8 +79,7 @@ check_conflict(char *name) int i; for (i = 0; label_chunk_info[i].c; i++) - if (label_chunk_info[i].type == PART_FILESYSTEM - && label_chunk_info[i].c->private + if (label_chunk_info[i].type == PART_FILESYSTEM && label_chunk_info[i].c->private && !strcmp(((PartInfo *)label_chunk_info[i].c->private)->mountpoint, name)) return TRUE; return FALSE; @@ -180,11 +179,10 @@ new_part(char *mpoint, Boolean newfs, u_long size) ret->newfs = newfs; if (!size) return ret; - for(target = size; target; target--) { - for(divisor = 4096 ; divisor > 1023; divisor--) { + for (target = size; target; target--) { + for (divisor = 4096 ; divisor > 1023; divisor--) { if (!(target % divisor)) { - sprintf(ret->newfs_cmd+strlen(ret->newfs_cmd), - " -u %ld",divisor); + sprintf(ret->newfs_cmd + strlen(ret->newfs_cmd), " -u %ld",divisor); return ret; } } @@ -351,19 +349,10 @@ print_label_chunks(void) memcpy(onestr + PART_PART_COL, label_chunk_info[i].c->name, strlen(label_chunk_info[i].c->name)); /* If it's a filesystem, display the mountpoint */ if (label_chunk_info[i].type == PART_FILESYSTEM || label_chunk_info[i].type == PART_FAT) { - if (label_chunk_info[i].c->private == NULL) { - static int mnt = 0; - char foo[10]; - - /* - * Hmm! A partition that must have already been here. - * Fill in a fake mountpoint and register it - */ - sprintf(foo, "/mnt%d", mnt++); - label_chunk_info[i].c->private = new_part(foo, FALSE, label_chunk_info[i].c->size); - label_chunk_info[i].c->private_free = safe_free; - } - mountpoint = ((PartInfo *)label_chunk_info[i].c->private)->mountpoint; + if (label_chunk_info[i].c->private != NULL) + mountpoint = ((PartInfo *)label_chunk_info[i].c->private)->mountpoint; + else + mountpoint = " "; if (label_chunk_info[i].type == PART_FAT) newfs = "DOS"; else @@ -394,10 +383,9 @@ print_label_chunks(void) static void print_command_summary() { - mvprintw(17, 0, - "The following commands are valid here (upper or lower case):"); - mvprintw(19, 0, "C = Create Partition D = Delete Partition M = Mount Partition"); - mvprintw(20, 0, "N = Newfs Options T = Toggle Newfs ESC = Exit this screen"); + mvprintw(17, 0, "The following commands are valid here (upper or lower case):"); + mvprintw(19, 0, "C = Create New D = Delete M = Set Mountpoint"); + mvprintw(20, 0, "N = Newfs Options T = Toggle Newfs U = Undo ESC = Exit"); mvprintw(21, 0, "The default target will be displayed in "); attrset(A_REVERSE); @@ -489,30 +477,23 @@ diskLabelEditor(char *str) char *val, *cp; int size; struct chunk *tmp; + char osize[80]; u_long flags = 0; - val = msgGetInput(NULL, "Please specify the size for new FreeBSD partition in blocks, or\nappend a trailing `M' for megabytes (e.g. 20M), `C' for cylinders\nor `%%' for a percentage of remaining space.\n\nSpace free is %d blocks (%dMB)", sz, sz / ONE_MEG); + sprintf(osize, "%d", sz); + val = msgGetInput(osize, "Please specify the size for new FreeBSD partition in blocks, or\nappend a trailing `M' for megabytes (e.g. 20M) or `C' for cylinders.\n\nSpace free is %d blocks (%dMB)", sz, sz / ONE_MEG); if (!val || (size = strtol(val, &cp, 0)) <= 0) break; - if (sz <= FS_MIN_SIZE) { - msgConfirm("The minimum filesystem size is %dMB", FS_MIN_SIZE / ONE_MEG); - break; - } if (*cp) { if (toupper(*cp) == 'M') size *= ONE_MEG; else if (toupper(*cp) == 'C') size *= (label_chunk_info[here].c->disk->bios_hd * label_chunk_info[here].c->disk->bios_sect); - else if (*cp == '%') { - float fsz, fsize; - - fsz = (float)sz; - fsize = (float)size; - fsize *= 0.10; - fsz *= fsize; - size = (int)fsz; - } + } + if (size <= FS_MIN_SIZE) { + msgConfirm("The minimum filesystem size is %dMB", FS_MIN_SIZE / ONE_MEG); + break; } type = get_partition_type(); if (type == PART_NONE) @@ -552,7 +533,8 @@ diskLabelEditor(char *str) } if (type != PART_SWAP) { /* This is needed to tell the newfs -u about the size */ - tmp->private = new_part(p->mountpoint,p->newfs,tmp->size); + tmp->private = new_part(p->mountpoint, p->newfs, tmp->size); + tmp->private_free = safe_free; safe_free(p); } else { tmp->private = p; @@ -617,18 +599,22 @@ diskLabelEditor(char *str) case 'T': /* Toggle newfs state */ if (label_chunk_info[here].type == PART_FILESYSTEM && label_chunk_info[here].c->private) { - PartInfo *pi = ((PartInfo *) - label_chunk_info[here].c->private); - label_chunk_info[here].c->private = new_part( - pi->mountpoint, - !pi->newfs, - label_chunk_info[here].c->size); + PartInfo *pi = ((PartInfo *)label_chunk_info[here].c->private); + label_chunk_info[here].c->private = new_part(pi->mountpoint, !pi->newfs, label_chunk_info[here].c->size); safe_free(pi); + label_chunk_info[here].c->private_free = safe_free; } else msg = MSG_NOT_APPLICABLE; break; + case 'U': + Free_Disk(label_chunk_info[here].c->disk); + label_chunk_info[here].c->disk = Open_Disk(label_chunk_info[here].c->disk->name); + if (!label_chunk_info[here].c->disk) + msgFatal("Can't reopen disk in undo!"); + record_label_chunks(); + case 'W': if (!msgYesNo("Are you sure you want to go into Wizard mode?\n\nThis is an entirely undocumented feature which you are not\nexpected to understand!")) { int i; diff --git a/usr.sbin/sysinstall/config.c b/usr.sbin/sysinstall/config.c index 14401b4..c791550 100644 --- a/usr.sbin/sysinstall/config.c +++ b/usr.sbin/sysinstall/config.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: config.c,v 1.10 1995/05/26 20:55:11 jkh Exp $ + * $Id: config.c,v 1.11 1995/05/28 09:31:29 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -113,6 +113,8 @@ fstype_short(Chunk *c1) else return "sw"; } + else if (c1->type == fat) + return "rw"; return "bog"; } diff --git a/usr.sbin/sysinstall/disks.c b/usr.sbin/sysinstall/disks.c index cae942e..35a3e0e 100644 --- a/usr.sbin/sysinstall/disks.c +++ b/usr.sbin/sysinstall/disks.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: disks.c,v 1.27 1995/05/22 14:10:12 jkh Exp $ + * $Id: disks.c,v 1.28 1995/05/25 18:48:23 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -109,7 +109,7 @@ print_command_summary() mvprintw(14, 0, "The following commands are supported (in upper or lower case):"); mvprintw(16, 0, "A = Use Entire Disk B = Bad Block Scan C = Create Partition"); mvprintw(17, 0, "D = Delete Partition G = Set BIOS Geometry S = Set Bootable"); - mvprintw(18, 0, "U = Undo All Changes W = `Wizard' Mode ESC = Exit this screen"); + mvprintw(18, 0, "U = Undo All Changes ESC = Exit this screen"); mvprintw(20, 0, "The currently selected partition is displayed in "); attrset(A_REVERSE); addstr("reverse"); attrset(A_NORMAL); addstr(" video."); mvprintw(21, 0, "Use F1 or ? to get more help, arrow keys to move."); diff --git a/usr.sbin/sysinstall/dist.c b/usr.sbin/sysinstall/dist.c index a7ed7b8..fe809bb 100644 --- a/usr.sbin/sysinstall/dist.c +++ b/usr.sbin/sysinstall/dist.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: dist.c,v 1.29 1995/05/28 07:05:21 phk Exp $ + * $Id: dist.c,v 1.30 1995/05/28 09:43:36 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -147,11 +147,11 @@ static Distribution DistTable[] = { { "manpages", "/", &Dists, DIST_MANPAGES, NULL }, { "proflibs", "/", &Dists, DIST_PROFLIBS, NULL }, { "dict", "/", &Dists, DIST_DICT, NULL }, -{ "src/", "/", &Dists, DIST_SRC, SrcDistTable }, +{ "src", "/", &Dists, DIST_SRC, SrcDistTable }, { "des", "/", &Dists, DIST_DES, NULL }, { "compat1x", "/", &Dists, DIST_COMPAT1X, NULL }, { "compat20", "/", &Dists, DIST_COMPAT20, NULL }, -{ "XF86311/", "/usr", &Dists, DIST_XF86, XF86DistTable }, +{ "XF86311", "/usr", &Dists, DIST_XF86, XF86DistTable }, { NULL }, }; @@ -171,7 +171,8 @@ static Distribution SrcDistTable[] = { { "ssys", "/usr/src", &SrcDists, DIST_SRC_SYS, NULL }, { "subin", "/usr/src", &SrcDists, DIST_SRC_UBIN, NULL }, { "susbin", "/usr/src", &SrcDists, DIST_SRC_USBIN, NULL }, -{ "xf86", "/usr/X11R6/src", &SrcDists, DIST_SRC_XF86, NULL }, +{ "XF86-xc", "/usr/X11R6/src", &SrcDists, DIST_SRC_XF86, NULL }, +{ "XF86-co", "/usr/X11R6/src", &SrcDists, DIST_SRC_XF86, NULL }, { NULL }, }; @@ -180,7 +181,7 @@ static Distribution XF86DistTable[] = { { "X311bin", "/usr", &XF86Dists, DIST_XF86_BIN, NULL }, { "X311lib", "/usr", &XF86Dists, DIST_XF86_LIB, NULL }, { "X311doc", "/usr", &XF86Dists, DIST_XF86_DOC, NULL }, -{ "Xf86311/", "/usr", &XF86Dists, DIST_XF86_FONTS, XF86FontDistTable }, +{ "Xf86311", "/usr", &XF86Dists, DIST_XF86_FONTS, XF86FontDistTable }, { "X311man", "/usr", &XF86Dists, DIST_XF86_MAN, NULL }, { "X311prog", "/usr", &XF86Dists, DIST_XF86_PROG, NULL }, { "X311link", "/usr", &XF86Dists, DIST_XF86_LINK, NULL }, @@ -188,7 +189,7 @@ static Distribution XF86DistTable[] = { { "X311lbx", "/usr", &XF86Dists, DIST_XF86_LBX, NULL }, { "X311xicf", "/usr", &XF86Dists, DIST_XF86_XINIT, NULL }, { "X311xdmcf", "/usr", &XF86Dists, DIST_XF86_XDMCF, NULL }, -{ "Xf86311/", "/usr", &XF86Dists, DIST_XF86_SERVER, XF86ServerDistTable }, +{ "Xf86311", "/usr", &XF86Dists, DIST_XF86_SERVER, XF86ServerDistTable }, { NULL }, }; @@ -246,7 +247,7 @@ distExtract(char *parent, Distribution *me) dist = me[i].my_name; path = parent ? parent : me[i].my_name; - snprintf(buf, 512, "%s%s.tgz", path, dist); + snprintf(buf, 512, "%s/%s.tgz", path, dist); fd = (*mediaDevice->get)(buf); if (fd != -1) { status = mediaExtractDist(me[i].my_name, me[i].my_dir, fd); @@ -257,7 +258,7 @@ distExtract(char *parent, Distribution *me) goto done; } - snprintf(buf, sizeof buf, "/stand/info/%s%s.inf", path, dist); + snprintf(buf, sizeof buf, "/stand/info/%s/%s.inf", path, dist); if (!access(buf, R_OK)) { msgDebug("Parsing attributes file for %s\n", dist); dist_attr = safe_malloc(sizeof(Attribs) * MAX_ATTRIBS); @@ -279,7 +280,7 @@ distExtract(char *parent, Distribution *me) msgDebug("Attempting to extract distribution from %u chunks.\n", numchunks); if (numchunks < 2 ) { - snprintf(buf, 512, "%s%s", path, dist); + snprintf(buf, 512, "%s/%s", path, dist); if (numchunks) strcat(buf,".aa"); fd = (*mediaDevice->get)(buf); @@ -299,7 +300,7 @@ distExtract(char *parent, Distribution *me) for (chunk = 0; chunk < numchunks; chunk++) { int n, retval; - snprintf(buf, 512, "%s%s.%c%c", path, dist, (chunk / 26) + 'a', (chunk % 26) + 'a'); + snprintf(buf, 512, "%s/%s.%c%c", path, dist, (chunk / 26) + 'a', (chunk % 26) + 'a'); fd = (*mediaDevice->get)(buf); if (fd < 0) { msgConfirm("failed to retreive piece file %s!\nAborting the transfer", buf); diff --git a/usr.sbin/sysinstall/install.c b/usr.sbin/sysinstall/install.c index 060f118..381e09a 100644 --- a/usr.sbin/sysinstall/install.c +++ b/usr.sbin/sysinstall/install.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: install.c,v 1.62 1995/05/27 23:39:30 phk Exp $ + * $Id: install.c,v 1.63 1995/05/28 09:31:32 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -55,7 +55,6 @@ static void make_filesystems(void); static void copy_self(void); static void root_extract(void); -static Disk *rootdisk; static Chunk *rootdev; static Boolean @@ -78,9 +77,7 @@ checkLabels(void) for (c1 = disk->chunks->part; c1; c1 = c1->next) { if (c1->type == freebsd) { for (c2 = c1->part; c2; c2 = c2->next) { - if (c2->type == part && c2->subtype != FS_SWAP && - c2->private && c2->flags & CHUNK_IS_ROOT) { - rootdisk = disk; + if (c2->type == part && c2->subtype != FS_SWAP && c2->private && c2->flags & CHUNK_IS_ROOT) { rootdev = c2; break; } @@ -182,12 +179,10 @@ installInitial(void) msgNotify("Running bad block scan on partition %s", c1->name); ret = vsystem("bad144 -v /dev/r%s 1234", c1->name); if (ret) - msgConfirm("Bad144 init on %s returned status of %d!", - c1->name, ret); + msgConfirm("Bad144 init on %s returned status of %d!", c1->name, ret); ret = vsystem("bad144 -v -s /dev/r%s", c1->name); if (ret) - msgConfirm("Bad144 scan on %s returned status of %d!", - c1->name, ret); + msgConfirm("Bad144 scan on %s returned status of %d!", c1->name, ret); } } } @@ -198,6 +193,7 @@ installInitial(void) chdir("/"); variable_set2(RUNNING_ON_ROOT, "yes"); /* stick a helpful shell over on the 4th VTY */ + msgDebug("Sticking a potentially helpful shell over on the 4th screen\n"); if (!fork()) { int i, fd; @@ -277,7 +273,7 @@ make_filesystems(void) if (p->newfs) { int i; - sprintf(dname, "/dev/r%sa", rootdisk->name); + sprintf(dname, "/dev/r%sa", rootdev->disk->name); msgNotify("Making a new root filesystem on %s", dname); i = vsystem("%s %s", p->newfs_cmd, dname); if (i) { @@ -287,13 +283,13 @@ make_filesystems(void) } else { msgConfirm("Warning: You have selected a Read-Only root device\nand may be unable to find the appropriate device entries on it\nif it is from an older pre-slice version of FreeBSD."); - sprintf(dname, "/dev/r%sa", rootdisk->name); + sprintf(dname, "/dev/r%sa", rootdev->disk->name); msgNotify("Checking integrity of existing %s filesystem", dname); i = vsystem("fsck -y %s", dname); if (i) msgConfirm("Warning: fsck returned status off %d - this partition may be\nunsafe to use.", i); } - sprintf(dname, "/dev/%sa", rootdisk->name); + sprintf(dname, "/dev/%sa", rootdev->disk->name); if (Mount("/mnt", dname)) { msgConfirm("Unable to mount the root file system! Giving up."); return; @@ -313,6 +309,9 @@ make_filesystems(void) /* Now buzz through the rest of the partitions and mount them too */ for (i = 0; devs[i]; i++) { + if (!devs[i]->enabled) + continue; + disk = (Disk *)devs[i]->private; if (!disk->chunks) msgFatal("No chunk list found for %s!", disk->name); diff --git a/usr.sbin/sysinstall/label.c b/usr.sbin/sysinstall/label.c index 4bef6c8..fa95bfe 100644 --- a/usr.sbin/sysinstall/label.c +++ b/usr.sbin/sysinstall/label.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: label.c,v 1.26 1995/05/26 11:21:46 jkh Exp $ + * $Id: label.c,v 1.27 1995/05/28 09:31:34 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -79,8 +79,7 @@ check_conflict(char *name) int i; for (i = 0; label_chunk_info[i].c; i++) - if (label_chunk_info[i].type == PART_FILESYSTEM - && label_chunk_info[i].c->private + if (label_chunk_info[i].type == PART_FILESYSTEM && label_chunk_info[i].c->private && !strcmp(((PartInfo *)label_chunk_info[i].c->private)->mountpoint, name)) return TRUE; return FALSE; @@ -180,11 +179,10 @@ new_part(char *mpoint, Boolean newfs, u_long size) ret->newfs = newfs; if (!size) return ret; - for(target = size; target; target--) { - for(divisor = 4096 ; divisor > 1023; divisor--) { + for (target = size; target; target--) { + for (divisor = 4096 ; divisor > 1023; divisor--) { if (!(target % divisor)) { - sprintf(ret->newfs_cmd+strlen(ret->newfs_cmd), - " -u %ld",divisor); + sprintf(ret->newfs_cmd + strlen(ret->newfs_cmd), " -u %ld",divisor); return ret; } } @@ -351,19 +349,10 @@ print_label_chunks(void) memcpy(onestr + PART_PART_COL, label_chunk_info[i].c->name, strlen(label_chunk_info[i].c->name)); /* If it's a filesystem, display the mountpoint */ if (label_chunk_info[i].type == PART_FILESYSTEM || label_chunk_info[i].type == PART_FAT) { - if (label_chunk_info[i].c->private == NULL) { - static int mnt = 0; - char foo[10]; - - /* - * Hmm! A partition that must have already been here. - * Fill in a fake mountpoint and register it - */ - sprintf(foo, "/mnt%d", mnt++); - label_chunk_info[i].c->private = new_part(foo, FALSE, label_chunk_info[i].c->size); - label_chunk_info[i].c->private_free = safe_free; - } - mountpoint = ((PartInfo *)label_chunk_info[i].c->private)->mountpoint; + if (label_chunk_info[i].c->private != NULL) + mountpoint = ((PartInfo *)label_chunk_info[i].c->private)->mountpoint; + else + mountpoint = " "; if (label_chunk_info[i].type == PART_FAT) newfs = "DOS"; else @@ -394,10 +383,9 @@ print_label_chunks(void) static void print_command_summary() { - mvprintw(17, 0, - "The following commands are valid here (upper or lower case):"); - mvprintw(19, 0, "C = Create Partition D = Delete Partition M = Mount Partition"); - mvprintw(20, 0, "N = Newfs Options T = Toggle Newfs ESC = Exit this screen"); + mvprintw(17, 0, "The following commands are valid here (upper or lower case):"); + mvprintw(19, 0, "C = Create New D = Delete M = Set Mountpoint"); + mvprintw(20, 0, "N = Newfs Options T = Toggle Newfs U = Undo ESC = Exit"); mvprintw(21, 0, "The default target will be displayed in "); attrset(A_REVERSE); @@ -489,30 +477,23 @@ diskLabelEditor(char *str) char *val, *cp; int size; struct chunk *tmp; + char osize[80]; u_long flags = 0; - val = msgGetInput(NULL, "Please specify the size for new FreeBSD partition in blocks, or\nappend a trailing `M' for megabytes (e.g. 20M), `C' for cylinders\nor `%%' for a percentage of remaining space.\n\nSpace free is %d blocks (%dMB)", sz, sz / ONE_MEG); + sprintf(osize, "%d", sz); + val = msgGetInput(osize, "Please specify the size for new FreeBSD partition in blocks, or\nappend a trailing `M' for megabytes (e.g. 20M) or `C' for cylinders.\n\nSpace free is %d blocks (%dMB)", sz, sz / ONE_MEG); if (!val || (size = strtol(val, &cp, 0)) <= 0) break; - if (sz <= FS_MIN_SIZE) { - msgConfirm("The minimum filesystem size is %dMB", FS_MIN_SIZE / ONE_MEG); - break; - } if (*cp) { if (toupper(*cp) == 'M') size *= ONE_MEG; else if (toupper(*cp) == 'C') size *= (label_chunk_info[here].c->disk->bios_hd * label_chunk_info[here].c->disk->bios_sect); - else if (*cp == '%') { - float fsz, fsize; - - fsz = (float)sz; - fsize = (float)size; - fsize *= 0.10; - fsz *= fsize; - size = (int)fsz; - } + } + if (size <= FS_MIN_SIZE) { + msgConfirm("The minimum filesystem size is %dMB", FS_MIN_SIZE / ONE_MEG); + break; } type = get_partition_type(); if (type == PART_NONE) @@ -552,7 +533,8 @@ diskLabelEditor(char *str) } if (type != PART_SWAP) { /* This is needed to tell the newfs -u about the size */ - tmp->private = new_part(p->mountpoint,p->newfs,tmp->size); + tmp->private = new_part(p->mountpoint, p->newfs, tmp->size); + tmp->private_free = safe_free; safe_free(p); } else { tmp->private = p; @@ -617,18 +599,22 @@ diskLabelEditor(char *str) case 'T': /* Toggle newfs state */ if (label_chunk_info[here].type == PART_FILESYSTEM && label_chunk_info[here].c->private) { - PartInfo *pi = ((PartInfo *) - label_chunk_info[here].c->private); - label_chunk_info[here].c->private = new_part( - pi->mountpoint, - !pi->newfs, - label_chunk_info[here].c->size); + PartInfo *pi = ((PartInfo *)label_chunk_info[here].c->private); + label_chunk_info[here].c->private = new_part(pi->mountpoint, !pi->newfs, label_chunk_info[here].c->size); safe_free(pi); + label_chunk_info[here].c->private_free = safe_free; } else msg = MSG_NOT_APPLICABLE; break; + case 'U': + Free_Disk(label_chunk_info[here].c->disk); + label_chunk_info[here].c->disk = Open_Disk(label_chunk_info[here].c->disk->name); + if (!label_chunk_info[here].c->disk) + msgFatal("Can't reopen disk in undo!"); + record_label_chunks(); + case 'W': if (!msgYesNo("Are you sure you want to go into Wizard mode?\n\nThis is an entirely undocumented feature which you are not\nexpected to understand!")) { int i; |