diff --git a/release/sysinstall/Makefile b/release/sysinstall/Makefile index 848f279f3473..2a206eba023c 100644 --- a/release/sysinstall/Makefile +++ b/release/sysinstall/Makefile @@ -39,10 +39,6 @@ makedevs.c: dev2c.sh Makefile rtermcap file2c 'const unsigned char boot0[] = {' '};' \ < bteasy17 >> makedevs.tmp rm -rf bteasy17 - file2c 'const unsigned char boot1[] = {' '};' \ - < ${BOOTS}/boot1 >> makedevs.tmp - file2c 'const unsigned char boot2[] = {' '};' \ - < ${BOOTS}/boot2 >> makedevs.tmp ./rtermcap cons25 | \ file2c 'const char termcap_cons25[] = {' ',0};' \ >> makedevs.tmp diff --git a/release/sysinstall/devices.c b/release/sysinstall/devices.c index d36158080056..0c135712d743 100644 --- a/release/sysinstall/devices.c +++ b/release/sysinstall/devices.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: devices.c,v 1.6 1995/05/06 09:34:09 jkh Exp $ + * $Id: devices.c,v 1.7 1995/05/07 03:37:58 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -86,6 +86,7 @@ record_chunks(struct disk *d) if (!d->chunks) msgFatal("No chunk list found for %s!", d->name); c1 = d->chunks->part; + current_chunk = 0; while (c1) { if (c1->type == unused && c1->size > last_free) { last_free = c1->size; diff --git a/release/sysinstall/disks.c b/release/sysinstall/disks.c index 730f3b232b52..e3ca133165f1 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.4 1995/05/07 02:04:25 jkh Exp $ + * $Id: disks.c,v 1.5 1995/05/07 03:37:59 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -128,11 +128,10 @@ static void record_fbsd_chunks(struct disk **disks) { int i, j, p; + struct chunk *c1, *c2; - j = p = 0; + j = p = current_chunk = 0; for (i = 0; disks[i]; i++) { - struct chunk *c1; - if (!disks[i]->chunks) msgFatal("No chunk list found for %s!", disks[i]->name); @@ -142,16 +141,16 @@ record_fbsd_chunks(struct disk **disks) fbsd_chunk_info[j].type = PART_SLICE; fbsd_chunk_info[j].d = disks[i]; fbsd_chunk_info[j].c = c1; - fbsd_chunk_info[j++].p = NULL; + fbsd_chunk_info[j].p = NULL; + ++j; } } - + } + for (i = 0; disks[i]; i++) { /* Then buzz through and pick up the partitions */ for (c1 = disks[i]->chunks->part; c1; c1 = c1->next) { if (c1->type == freebsd) { - struct chunk *c2 = c1->part; - - while (c2) { + for (c2 = c1->part; c2; c2 = c2->next) { if (c2->type == part) { if (c2->subtype == FS_SWAP) fbsd_chunk_info[j].type = PART_SWAP; @@ -159,9 +158,9 @@ record_fbsd_chunks(struct disk **disks) fbsd_chunk_info[j].type = PART_FILESYSTEM; fbsd_chunk_info[j].d = disks[i]; fbsd_chunk_info[j].c = c2; - fbsd_chunk_info[j++].p = c2->private; + fbsd_chunk_info[j].p = c2->private; + ++j; } - c2 = c2->next; } } } @@ -170,39 +169,48 @@ record_fbsd_chunks(struct disk **disks) fbsd_chunk_info[j].c = NULL; } +static PartInfo * +new_part(char *mpoint, Boolean newfs) +{ + PartInfo *ret; + + ret = (PartInfo *)safe_malloc(sizeof(PartInfo)); + strncpy(ret->mountpoint, mpoint, FILENAME_MAX); + ret->newfs = newfs; + return ret; +} + int -get_mountpoint(struct chunk *c) +get_mountpoint(int i) { char *val; - PartInfo *part; - val = msgGetInput(c->private, - "Please specify mount point for new partition"); + val = msgGetInput(fbsd_chunk_info[i].p ? + fbsd_chunk_info[i].p->mountpoint : NULL, + "Please specify a mount point for the new partition"); if (val) { if (!strcmp(val, "/")) { - if (c->flags & CHUNK_PAST_1024) { + if (fbsd_chunk_info[i].c->flags & CHUNK_PAST_1024) { msgConfirm("This region cannot be used for your root partition as\nit is past the 1024'th cylinder mark and the system would not be\nable to boot from it. Please pick another location for your\nroot partition and try again!"); return 1; } - c->flags |= CHUNK_IS_ROOT; + fbsd_chunk_info[i].c->flags |= CHUNK_IS_ROOT; } if (check_conflict(val)) { msgConfirm("You already have a mountpoint for %s assigned!", val); return 1; } - safe_free(c->private); - part = (PartInfo *)malloc(sizeof(PartInfo)); - strncpy(part->mountpoint, val, FILENAME_MAX); - part->newfs = TRUE; - c->private = (void *)part; - c->private_free = free; + safe_free(fbsd_chunk_info[i].c->private); + fbsd_chunk_info[i].c->private = new_part(val, TRUE); + fbsd_chunk_info[i].c->private_free = free; + fbsd_chunk_info[i].p = fbsd_chunk_info[i].c->private; return 0; } return 1; } static PartType -get_partition_type(struct chunk *c) +get_partition_type(void) { char selection[20]; static unsigned char *fs_types[] = { @@ -228,7 +236,7 @@ get_partition_type(struct chunk *c) #define PART_MOUNT_COL 8 #define PART_SIZE_COL (PART_MOUNT_COL + MAX_MOUNT_NAME + 4) #define PART_NEWFS_COL (PART_SIZE_COL + 8) -#define PART_OFF 40 +#define PART_OFF 42 static void print_fbsd_chunks(void) @@ -278,22 +286,28 @@ print_fbsd_chunks(void) } /* Otherwise it's a swap or filesystem entry, at the bottom */ else { - char *mountpoint, *newfs; + char onestr[PART_OFF], num[10], *mountpoint, *newfs; + memset(onestr, ' ', PART_OFF - 1); + onestr[PART_OFF - 1] = '\0'; /* Go for two columns */ - if (prow == (CHUNK_PART_START_ROW + 9)) + if (prow == (CHUNK_PART_START_ROW + 8)) pcol = PART_OFF; else pcol = 0; - mvaddstr(prow, pcol + PART_PART_COL, fbsd_chunk_info[i].c->name); + memcpy(onestr + PART_PART_COL, fbsd_chunk_info[i].c->name, + strlen(fbsd_chunk_info[i].c->name)); if (fbsd_chunk_info[i].type == PART_FILESYSTEM) { if (fbsd_chunk_info[i].p) { mountpoint = fbsd_chunk_info[i].p->mountpoint; newfs = fbsd_chunk_info[i].p->newfs ? "Y" : "N"; } else { + fbsd_chunk_info[i].c->private = new_part("", FALSE); + fbsd_chunk_info[i].c->private_free = free; + fbsd_chunk_info[i].p = fbsd_chunk_info[i].c->private; mountpoint = " "; - newfs = " "; + newfs = "N"; } } else { @@ -301,11 +315,12 @@ print_fbsd_chunks(void) newfs = " "; } for (j = 0; j < MAX_MOUNT_NAME && mountpoint[j]; j++) - mvaddch(prow, pcol + PART_MOUNT_COL + j, mountpoint[j]); - mvprintw(prow, pcol + PART_SIZE_COL, "%4dMB", - fbsd_chunk_info[i].c->size ? - fbsd_chunk_info[i].c->size / 2048 : 0); - mvaddstr(prow, pcol + PART_NEWFS_COL, newfs); + onestr[PART_MOUNT_COL + j] = mountpoint[j]; + sprintf(num, "%4ldMB", fbsd_chunk_info[i].c->size ? + fbsd_chunk_info[i].c->size / 2048 : 0); + memcpy(onestr + PART_SIZE_COL, num, strlen(num)); + memcpy(onestr + PART_NEWFS_COL, newfs, strlen(newfs)); + mvaddstr(prow, pcol, onestr); ++prow; } if (i == current_chunk) @@ -345,13 +360,14 @@ partition_disks(struct disk **disks) print_fbsd_chunks(); print_command_summary(); if (msg) { - standout(); mvprintw(23, 0, msg); standend(); + attrset(A_REVERSE); mvprintw(23, 0, msg); attrset(A_NORMAL); beep(); msg = NULL; } refresh(); key = toupper(getch()); switch (key) { + case KEY_UP: case '-': if (current_chunk != 0) @@ -382,7 +398,7 @@ partition_disks(struct disk **disks) case 'C': if (fbsd_chunk_info[current_chunk].type != PART_SLICE) { - msg = "Can only create sub-partitions in a master partition (at top)"; + msg = "Can't create a sub-partition here (that only works in master partitions)"; break; } sz = space_free(fbsd_chunk_info[current_chunk].c); @@ -397,9 +413,7 @@ partition_disks(struct disk **disks) if (val && (size = strtol(val, 0, 0)) > 0) { PartType type; - if (get_mountpoint(fbsd_chunk_info[current_chunk].c)) - break; - type = get_partition_type(fbsd_chunk_info[current_chunk].c); + type = get_partition_type(); if (type == PART_NONE) break; Create_Chunk(fbsd_chunk_info[current_chunk].d, @@ -409,20 +423,32 @@ partition_disks(struct disk **disks) part, type == PART_SWAP ? FS_SWAP : freebsd, fbsd_chunk_info[current_chunk].c->flags); + if (get_mountpoint(current_chunk)) + break; record_fbsd_chunks(disks); } } break; - case 'D': + case 'D': /* delete */ if (fbsd_chunk_info[current_chunk].type == PART_SLICE) { msg = "Use the Master Partition Editor to delete one of these"; break; } Delete_Chunk(fbsd_chunk_info[current_chunk].d, fbsd_chunk_info[current_chunk].c); + record_fbsd_chunks(disks); break; - + + case 'M': /* mount */ + if (fbsd_chunk_info[current_chunk].type == PART_SLICE) { + msg = "You can't mount one of these directly!"; + break; + } + if (get_mountpoint(current_chunk)) + record_fbsd_chunks(disks); + break; + case 27: /* ESC */ partitioning = FALSE; break; diff --git a/release/sysinstall/msg.c b/release/sysinstall/msg.c index 720899414096..70cf576c9d44 100644 --- a/release/sysinstall/msg.c +++ b/release/sysinstall/msg.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: msg.c,v 1.6 1995/05/05 23:47:44 jkh Exp $ + * $Id: msg.c,v 1.7 1995/05/07 03:38:01 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -52,7 +52,7 @@ msgYap(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); errstr[0] = '\0'; va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -73,7 +73,7 @@ msgInfo(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); errstr[0] = '\0'; va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -94,7 +94,7 @@ msgWarn(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); strcpy(errstr, "Warning: "); va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -116,7 +116,7 @@ msgError(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); strcpy(errstr, "Error: "); va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -138,7 +138,7 @@ msgFatal(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); strcpy(errstr, "Fatal Error: "); va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -167,7 +167,7 @@ msgConfirm(char *fmt, ...) va_list args; char *errstr; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); @@ -184,7 +184,7 @@ msgNotify(char *fmt, ...) va_list args; char *errstr; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); @@ -202,7 +202,7 @@ msgYesNo(char *fmt, ...) char *errstr; int ret; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); @@ -222,7 +222,7 @@ msgGetInput(char *buf, char *fmt, ...) static char input_buffer[256]; int rval; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); diff --git a/usr.sbin/sade/Makefile b/usr.sbin/sade/Makefile index 848f279f3473..2a206eba023c 100644 --- a/usr.sbin/sade/Makefile +++ b/usr.sbin/sade/Makefile @@ -39,10 +39,6 @@ makedevs.c: dev2c.sh Makefile rtermcap file2c 'const unsigned char boot0[] = {' '};' \ < bteasy17 >> makedevs.tmp rm -rf bteasy17 - file2c 'const unsigned char boot1[] = {' '};' \ - < ${BOOTS}/boot1 >> makedevs.tmp - file2c 'const unsigned char boot2[] = {' '};' \ - < ${BOOTS}/boot2 >> makedevs.tmp ./rtermcap cons25 | \ file2c 'const char termcap_cons25[] = {' ',0};' \ >> makedevs.tmp diff --git a/usr.sbin/sade/devices.c b/usr.sbin/sade/devices.c index d36158080056..0c135712d743 100644 --- a/usr.sbin/sade/devices.c +++ b/usr.sbin/sade/devices.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: devices.c,v 1.6 1995/05/06 09:34:09 jkh Exp $ + * $Id: devices.c,v 1.7 1995/05/07 03:37:58 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -86,6 +86,7 @@ record_chunks(struct disk *d) if (!d->chunks) msgFatal("No chunk list found for %s!", d->name); c1 = d->chunks->part; + current_chunk = 0; while (c1) { if (c1->type == unused && c1->size > last_free) { last_free = c1->size; diff --git a/usr.sbin/sade/disks.c b/usr.sbin/sade/disks.c index 730f3b232b52..e3ca133165f1 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.4 1995/05/07 02:04:25 jkh Exp $ + * $Id: disks.c,v 1.5 1995/05/07 03:37:59 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -128,11 +128,10 @@ static void record_fbsd_chunks(struct disk **disks) { int i, j, p; + struct chunk *c1, *c2; - j = p = 0; + j = p = current_chunk = 0; for (i = 0; disks[i]; i++) { - struct chunk *c1; - if (!disks[i]->chunks) msgFatal("No chunk list found for %s!", disks[i]->name); @@ -142,16 +141,16 @@ record_fbsd_chunks(struct disk **disks) fbsd_chunk_info[j].type = PART_SLICE; fbsd_chunk_info[j].d = disks[i]; fbsd_chunk_info[j].c = c1; - fbsd_chunk_info[j++].p = NULL; + fbsd_chunk_info[j].p = NULL; + ++j; } } - + } + for (i = 0; disks[i]; i++) { /* Then buzz through and pick up the partitions */ for (c1 = disks[i]->chunks->part; c1; c1 = c1->next) { if (c1->type == freebsd) { - struct chunk *c2 = c1->part; - - while (c2) { + for (c2 = c1->part; c2; c2 = c2->next) { if (c2->type == part) { if (c2->subtype == FS_SWAP) fbsd_chunk_info[j].type = PART_SWAP; @@ -159,9 +158,9 @@ record_fbsd_chunks(struct disk **disks) fbsd_chunk_info[j].type = PART_FILESYSTEM; fbsd_chunk_info[j].d = disks[i]; fbsd_chunk_info[j].c = c2; - fbsd_chunk_info[j++].p = c2->private; + fbsd_chunk_info[j].p = c2->private; + ++j; } - c2 = c2->next; } } } @@ -170,39 +169,48 @@ record_fbsd_chunks(struct disk **disks) fbsd_chunk_info[j].c = NULL; } +static PartInfo * +new_part(char *mpoint, Boolean newfs) +{ + PartInfo *ret; + + ret = (PartInfo *)safe_malloc(sizeof(PartInfo)); + strncpy(ret->mountpoint, mpoint, FILENAME_MAX); + ret->newfs = newfs; + return ret; +} + int -get_mountpoint(struct chunk *c) +get_mountpoint(int i) { char *val; - PartInfo *part; - val = msgGetInput(c->private, - "Please specify mount point for new partition"); + val = msgGetInput(fbsd_chunk_info[i].p ? + fbsd_chunk_info[i].p->mountpoint : NULL, + "Please specify a mount point for the new partition"); if (val) { if (!strcmp(val, "/")) { - if (c->flags & CHUNK_PAST_1024) { + if (fbsd_chunk_info[i].c->flags & CHUNK_PAST_1024) { msgConfirm("This region cannot be used for your root partition as\nit is past the 1024'th cylinder mark and the system would not be\nable to boot from it. Please pick another location for your\nroot partition and try again!"); return 1; } - c->flags |= CHUNK_IS_ROOT; + fbsd_chunk_info[i].c->flags |= CHUNK_IS_ROOT; } if (check_conflict(val)) { msgConfirm("You already have a mountpoint for %s assigned!", val); return 1; } - safe_free(c->private); - part = (PartInfo *)malloc(sizeof(PartInfo)); - strncpy(part->mountpoint, val, FILENAME_MAX); - part->newfs = TRUE; - c->private = (void *)part; - c->private_free = free; + safe_free(fbsd_chunk_info[i].c->private); + fbsd_chunk_info[i].c->private = new_part(val, TRUE); + fbsd_chunk_info[i].c->private_free = free; + fbsd_chunk_info[i].p = fbsd_chunk_info[i].c->private; return 0; } return 1; } static PartType -get_partition_type(struct chunk *c) +get_partition_type(void) { char selection[20]; static unsigned char *fs_types[] = { @@ -228,7 +236,7 @@ get_partition_type(struct chunk *c) #define PART_MOUNT_COL 8 #define PART_SIZE_COL (PART_MOUNT_COL + MAX_MOUNT_NAME + 4) #define PART_NEWFS_COL (PART_SIZE_COL + 8) -#define PART_OFF 40 +#define PART_OFF 42 static void print_fbsd_chunks(void) @@ -278,22 +286,28 @@ print_fbsd_chunks(void) } /* Otherwise it's a swap or filesystem entry, at the bottom */ else { - char *mountpoint, *newfs; + char onestr[PART_OFF], num[10], *mountpoint, *newfs; + memset(onestr, ' ', PART_OFF - 1); + onestr[PART_OFF - 1] = '\0'; /* Go for two columns */ - if (prow == (CHUNK_PART_START_ROW + 9)) + if (prow == (CHUNK_PART_START_ROW + 8)) pcol = PART_OFF; else pcol = 0; - mvaddstr(prow, pcol + PART_PART_COL, fbsd_chunk_info[i].c->name); + memcpy(onestr + PART_PART_COL, fbsd_chunk_info[i].c->name, + strlen(fbsd_chunk_info[i].c->name)); if (fbsd_chunk_info[i].type == PART_FILESYSTEM) { if (fbsd_chunk_info[i].p) { mountpoint = fbsd_chunk_info[i].p->mountpoint; newfs = fbsd_chunk_info[i].p->newfs ? "Y" : "N"; } else { + fbsd_chunk_info[i].c->private = new_part("", FALSE); + fbsd_chunk_info[i].c->private_free = free; + fbsd_chunk_info[i].p = fbsd_chunk_info[i].c->private; mountpoint = " "; - newfs = " "; + newfs = "N"; } } else { @@ -301,11 +315,12 @@ print_fbsd_chunks(void) newfs = " "; } for (j = 0; j < MAX_MOUNT_NAME && mountpoint[j]; j++) - mvaddch(prow, pcol + PART_MOUNT_COL + j, mountpoint[j]); - mvprintw(prow, pcol + PART_SIZE_COL, "%4dMB", - fbsd_chunk_info[i].c->size ? - fbsd_chunk_info[i].c->size / 2048 : 0); - mvaddstr(prow, pcol + PART_NEWFS_COL, newfs); + onestr[PART_MOUNT_COL + j] = mountpoint[j]; + sprintf(num, "%4ldMB", fbsd_chunk_info[i].c->size ? + fbsd_chunk_info[i].c->size / 2048 : 0); + memcpy(onestr + PART_SIZE_COL, num, strlen(num)); + memcpy(onestr + PART_NEWFS_COL, newfs, strlen(newfs)); + mvaddstr(prow, pcol, onestr); ++prow; } if (i == current_chunk) @@ -345,13 +360,14 @@ partition_disks(struct disk **disks) print_fbsd_chunks(); print_command_summary(); if (msg) { - standout(); mvprintw(23, 0, msg); standend(); + attrset(A_REVERSE); mvprintw(23, 0, msg); attrset(A_NORMAL); beep(); msg = NULL; } refresh(); key = toupper(getch()); switch (key) { + case KEY_UP: case '-': if (current_chunk != 0) @@ -382,7 +398,7 @@ partition_disks(struct disk **disks) case 'C': if (fbsd_chunk_info[current_chunk].type != PART_SLICE) { - msg = "Can only create sub-partitions in a master partition (at top)"; + msg = "Can't create a sub-partition here (that only works in master partitions)"; break; } sz = space_free(fbsd_chunk_info[current_chunk].c); @@ -397,9 +413,7 @@ partition_disks(struct disk **disks) if (val && (size = strtol(val, 0, 0)) > 0) { PartType type; - if (get_mountpoint(fbsd_chunk_info[current_chunk].c)) - break; - type = get_partition_type(fbsd_chunk_info[current_chunk].c); + type = get_partition_type(); if (type == PART_NONE) break; Create_Chunk(fbsd_chunk_info[current_chunk].d, @@ -409,20 +423,32 @@ partition_disks(struct disk **disks) part, type == PART_SWAP ? FS_SWAP : freebsd, fbsd_chunk_info[current_chunk].c->flags); + if (get_mountpoint(current_chunk)) + break; record_fbsd_chunks(disks); } } break; - case 'D': + case 'D': /* delete */ if (fbsd_chunk_info[current_chunk].type == PART_SLICE) { msg = "Use the Master Partition Editor to delete one of these"; break; } Delete_Chunk(fbsd_chunk_info[current_chunk].d, fbsd_chunk_info[current_chunk].c); + record_fbsd_chunks(disks); break; - + + case 'M': /* mount */ + if (fbsd_chunk_info[current_chunk].type == PART_SLICE) { + msg = "You can't mount one of these directly!"; + break; + } + if (get_mountpoint(current_chunk)) + record_fbsd_chunks(disks); + break; + case 27: /* ESC */ partitioning = FALSE; break; diff --git a/usr.sbin/sade/msg.c b/usr.sbin/sade/msg.c index 720899414096..70cf576c9d44 100644 --- a/usr.sbin/sade/msg.c +++ b/usr.sbin/sade/msg.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: msg.c,v 1.6 1995/05/05 23:47:44 jkh Exp $ + * $Id: msg.c,v 1.7 1995/05/07 03:38:01 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -52,7 +52,7 @@ msgYap(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); errstr[0] = '\0'; va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -73,7 +73,7 @@ msgInfo(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); errstr[0] = '\0'; va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -94,7 +94,7 @@ msgWarn(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); strcpy(errstr, "Warning: "); va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -116,7 +116,7 @@ msgError(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); strcpy(errstr, "Error: "); va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -138,7 +138,7 @@ msgFatal(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); strcpy(errstr, "Fatal Error: "); va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -167,7 +167,7 @@ msgConfirm(char *fmt, ...) va_list args; char *errstr; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); @@ -184,7 +184,7 @@ msgNotify(char *fmt, ...) va_list args; char *errstr; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); @@ -202,7 +202,7 @@ msgYesNo(char *fmt, ...) char *errstr; int ret; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); @@ -222,7 +222,7 @@ msgGetInput(char *buf, char *fmt, ...) static char input_buffer[256]; int rval; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); diff --git a/usr.sbin/sysinstall/Makefile b/usr.sbin/sysinstall/Makefile index 848f279f3473..2a206eba023c 100644 --- a/usr.sbin/sysinstall/Makefile +++ b/usr.sbin/sysinstall/Makefile @@ -39,10 +39,6 @@ makedevs.c: dev2c.sh Makefile rtermcap file2c 'const unsigned char boot0[] = {' '};' \ < bteasy17 >> makedevs.tmp rm -rf bteasy17 - file2c 'const unsigned char boot1[] = {' '};' \ - < ${BOOTS}/boot1 >> makedevs.tmp - file2c 'const unsigned char boot2[] = {' '};' \ - < ${BOOTS}/boot2 >> makedevs.tmp ./rtermcap cons25 | \ file2c 'const char termcap_cons25[] = {' ',0};' \ >> makedevs.tmp diff --git a/usr.sbin/sysinstall/devices.c b/usr.sbin/sysinstall/devices.c index d36158080056..0c135712d743 100644 --- a/usr.sbin/sysinstall/devices.c +++ b/usr.sbin/sysinstall/devices.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: devices.c,v 1.6 1995/05/06 09:34:09 jkh Exp $ + * $Id: devices.c,v 1.7 1995/05/07 03:37:58 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -86,6 +86,7 @@ record_chunks(struct disk *d) if (!d->chunks) msgFatal("No chunk list found for %s!", d->name); c1 = d->chunks->part; + current_chunk = 0; while (c1) { if (c1->type == unused && c1->size > last_free) { last_free = c1->size; diff --git a/usr.sbin/sysinstall/disks.c b/usr.sbin/sysinstall/disks.c index 730f3b232b52..e3ca133165f1 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.4 1995/05/07 02:04:25 jkh Exp $ + * $Id: disks.c,v 1.5 1995/05/07 03:37:59 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -128,11 +128,10 @@ static void record_fbsd_chunks(struct disk **disks) { int i, j, p; + struct chunk *c1, *c2; - j = p = 0; + j = p = current_chunk = 0; for (i = 0; disks[i]; i++) { - struct chunk *c1; - if (!disks[i]->chunks) msgFatal("No chunk list found for %s!", disks[i]->name); @@ -142,16 +141,16 @@ record_fbsd_chunks(struct disk **disks) fbsd_chunk_info[j].type = PART_SLICE; fbsd_chunk_info[j].d = disks[i]; fbsd_chunk_info[j].c = c1; - fbsd_chunk_info[j++].p = NULL; + fbsd_chunk_info[j].p = NULL; + ++j; } } - + } + for (i = 0; disks[i]; i++) { /* Then buzz through and pick up the partitions */ for (c1 = disks[i]->chunks->part; c1; c1 = c1->next) { if (c1->type == freebsd) { - struct chunk *c2 = c1->part; - - while (c2) { + for (c2 = c1->part; c2; c2 = c2->next) { if (c2->type == part) { if (c2->subtype == FS_SWAP) fbsd_chunk_info[j].type = PART_SWAP; @@ -159,9 +158,9 @@ record_fbsd_chunks(struct disk **disks) fbsd_chunk_info[j].type = PART_FILESYSTEM; fbsd_chunk_info[j].d = disks[i]; fbsd_chunk_info[j].c = c2; - fbsd_chunk_info[j++].p = c2->private; + fbsd_chunk_info[j].p = c2->private; + ++j; } - c2 = c2->next; } } } @@ -170,39 +169,48 @@ record_fbsd_chunks(struct disk **disks) fbsd_chunk_info[j].c = NULL; } +static PartInfo * +new_part(char *mpoint, Boolean newfs) +{ + PartInfo *ret; + + ret = (PartInfo *)safe_malloc(sizeof(PartInfo)); + strncpy(ret->mountpoint, mpoint, FILENAME_MAX); + ret->newfs = newfs; + return ret; +} + int -get_mountpoint(struct chunk *c) +get_mountpoint(int i) { char *val; - PartInfo *part; - val = msgGetInput(c->private, - "Please specify mount point for new partition"); + val = msgGetInput(fbsd_chunk_info[i].p ? + fbsd_chunk_info[i].p->mountpoint : NULL, + "Please specify a mount point for the new partition"); if (val) { if (!strcmp(val, "/")) { - if (c->flags & CHUNK_PAST_1024) { + if (fbsd_chunk_info[i].c->flags & CHUNK_PAST_1024) { msgConfirm("This region cannot be used for your root partition as\nit is past the 1024'th cylinder mark and the system would not be\nable to boot from it. Please pick another location for your\nroot partition and try again!"); return 1; } - c->flags |= CHUNK_IS_ROOT; + fbsd_chunk_info[i].c->flags |= CHUNK_IS_ROOT; } if (check_conflict(val)) { msgConfirm("You already have a mountpoint for %s assigned!", val); return 1; } - safe_free(c->private); - part = (PartInfo *)malloc(sizeof(PartInfo)); - strncpy(part->mountpoint, val, FILENAME_MAX); - part->newfs = TRUE; - c->private = (void *)part; - c->private_free = free; + safe_free(fbsd_chunk_info[i].c->private); + fbsd_chunk_info[i].c->private = new_part(val, TRUE); + fbsd_chunk_info[i].c->private_free = free; + fbsd_chunk_info[i].p = fbsd_chunk_info[i].c->private; return 0; } return 1; } static PartType -get_partition_type(struct chunk *c) +get_partition_type(void) { char selection[20]; static unsigned char *fs_types[] = { @@ -228,7 +236,7 @@ get_partition_type(struct chunk *c) #define PART_MOUNT_COL 8 #define PART_SIZE_COL (PART_MOUNT_COL + MAX_MOUNT_NAME + 4) #define PART_NEWFS_COL (PART_SIZE_COL + 8) -#define PART_OFF 40 +#define PART_OFF 42 static void print_fbsd_chunks(void) @@ -278,22 +286,28 @@ print_fbsd_chunks(void) } /* Otherwise it's a swap or filesystem entry, at the bottom */ else { - char *mountpoint, *newfs; + char onestr[PART_OFF], num[10], *mountpoint, *newfs; + memset(onestr, ' ', PART_OFF - 1); + onestr[PART_OFF - 1] = '\0'; /* Go for two columns */ - if (prow == (CHUNK_PART_START_ROW + 9)) + if (prow == (CHUNK_PART_START_ROW + 8)) pcol = PART_OFF; else pcol = 0; - mvaddstr(prow, pcol + PART_PART_COL, fbsd_chunk_info[i].c->name); + memcpy(onestr + PART_PART_COL, fbsd_chunk_info[i].c->name, + strlen(fbsd_chunk_info[i].c->name)); if (fbsd_chunk_info[i].type == PART_FILESYSTEM) { if (fbsd_chunk_info[i].p) { mountpoint = fbsd_chunk_info[i].p->mountpoint; newfs = fbsd_chunk_info[i].p->newfs ? "Y" : "N"; } else { + fbsd_chunk_info[i].c->private = new_part("", FALSE); + fbsd_chunk_info[i].c->private_free = free; + fbsd_chunk_info[i].p = fbsd_chunk_info[i].c->private; mountpoint = " "; - newfs = " "; + newfs = "N"; } } else { @@ -301,11 +315,12 @@ print_fbsd_chunks(void) newfs = " "; } for (j = 0; j < MAX_MOUNT_NAME && mountpoint[j]; j++) - mvaddch(prow, pcol + PART_MOUNT_COL + j, mountpoint[j]); - mvprintw(prow, pcol + PART_SIZE_COL, "%4dMB", - fbsd_chunk_info[i].c->size ? - fbsd_chunk_info[i].c->size / 2048 : 0); - mvaddstr(prow, pcol + PART_NEWFS_COL, newfs); + onestr[PART_MOUNT_COL + j] = mountpoint[j]; + sprintf(num, "%4ldMB", fbsd_chunk_info[i].c->size ? + fbsd_chunk_info[i].c->size / 2048 : 0); + memcpy(onestr + PART_SIZE_COL, num, strlen(num)); + memcpy(onestr + PART_NEWFS_COL, newfs, strlen(newfs)); + mvaddstr(prow, pcol, onestr); ++prow; } if (i == current_chunk) @@ -345,13 +360,14 @@ partition_disks(struct disk **disks) print_fbsd_chunks(); print_command_summary(); if (msg) { - standout(); mvprintw(23, 0, msg); standend(); + attrset(A_REVERSE); mvprintw(23, 0, msg); attrset(A_NORMAL); beep(); msg = NULL; } refresh(); key = toupper(getch()); switch (key) { + case KEY_UP: case '-': if (current_chunk != 0) @@ -382,7 +398,7 @@ partition_disks(struct disk **disks) case 'C': if (fbsd_chunk_info[current_chunk].type != PART_SLICE) { - msg = "Can only create sub-partitions in a master partition (at top)"; + msg = "Can't create a sub-partition here (that only works in master partitions)"; break; } sz = space_free(fbsd_chunk_info[current_chunk].c); @@ -397,9 +413,7 @@ partition_disks(struct disk **disks) if (val && (size = strtol(val, 0, 0)) > 0) { PartType type; - if (get_mountpoint(fbsd_chunk_info[current_chunk].c)) - break; - type = get_partition_type(fbsd_chunk_info[current_chunk].c); + type = get_partition_type(); if (type == PART_NONE) break; Create_Chunk(fbsd_chunk_info[current_chunk].d, @@ -409,20 +423,32 @@ partition_disks(struct disk **disks) part, type == PART_SWAP ? FS_SWAP : freebsd, fbsd_chunk_info[current_chunk].c->flags); + if (get_mountpoint(current_chunk)) + break; record_fbsd_chunks(disks); } } break; - case 'D': + case 'D': /* delete */ if (fbsd_chunk_info[current_chunk].type == PART_SLICE) { msg = "Use the Master Partition Editor to delete one of these"; break; } Delete_Chunk(fbsd_chunk_info[current_chunk].d, fbsd_chunk_info[current_chunk].c); + record_fbsd_chunks(disks); break; - + + case 'M': /* mount */ + if (fbsd_chunk_info[current_chunk].type == PART_SLICE) { + msg = "You can't mount one of these directly!"; + break; + } + if (get_mountpoint(current_chunk)) + record_fbsd_chunks(disks); + break; + case 27: /* ESC */ partitioning = FALSE; break; diff --git a/usr.sbin/sysinstall/msg.c b/usr.sbin/sysinstall/msg.c index 720899414096..70cf576c9d44 100644 --- a/usr.sbin/sysinstall/msg.c +++ b/usr.sbin/sysinstall/msg.c @@ -4,7 +4,7 @@ * This is probably the last program in the `sysinstall' line - the next * generation being essentially a complete rewrite. * - * $Id: msg.c,v 1.6 1995/05/05 23:47:44 jkh Exp $ + * $Id: msg.c,v 1.7 1995/05/07 03:38:01 jkh Exp $ * * Copyright (c) 1995 * Jordan Hubbard. All rights reserved. @@ -52,7 +52,7 @@ msgYap(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); errstr[0] = '\0'; va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -73,7 +73,7 @@ msgInfo(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); errstr[0] = '\0'; va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -94,7 +94,7 @@ msgWarn(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); strcpy(errstr, "Warning: "); va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -116,7 +116,7 @@ msgError(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); strcpy(errstr, "Error: "); va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -138,7 +138,7 @@ msgFatal(char *fmt, ...) char *errstr; int attrs; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); strcpy(errstr, "Fatal Error: "); va_start(args, fmt); vsnprintf((char *)(errstr + strlen(errstr)), FILENAME_MAX, fmt, args); @@ -167,7 +167,7 @@ msgConfirm(char *fmt, ...) va_list args; char *errstr; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); @@ -184,7 +184,7 @@ msgNotify(char *fmt, ...) va_list args; char *errstr; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); @@ -202,7 +202,7 @@ msgYesNo(char *fmt, ...) char *errstr; int ret; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args); @@ -222,7 +222,7 @@ msgGetInput(char *buf, char *fmt, ...) static char input_buffer[256]; int rval; - errstr = (char *)malloc(FILENAME_MAX); + errstr = (char *)safe_malloc(FILENAME_MAX); va_start(args, fmt); vsnprintf(errstr, FILENAME_MAX, fmt, args); va_end(args);