diff options
-rw-r--r-- | release/sysinstall/Makefile | 4 | ||||
-rw-r--r-- | release/sysinstall/devices.c | 3 | ||||
-rw-r--r-- | release/sysinstall/disks.c | 108 | ||||
-rw-r--r-- | release/sysinstall/msg.c | 20 | ||||
-rw-r--r-- | usr.sbin/sade/Makefile | 4 | ||||
-rw-r--r-- | usr.sbin/sade/devices.c | 3 | ||||
-rw-r--r-- | usr.sbin/sade/disks.c | 108 | ||||
-rw-r--r-- | usr.sbin/sade/msg.c | 20 | ||||
-rw-r--r-- | usr.sbin/sysinstall/Makefile | 4 | ||||
-rw-r--r-- | usr.sbin/sysinstall/devices.c | 3 | ||||
-rw-r--r-- | usr.sbin/sysinstall/disks.c | 108 | ||||
-rw-r--r-- | usr.sbin/sysinstall/msg.c | 20 |
12 files changed, 237 insertions, 168 deletions
diff --git a/release/sysinstall/Makefile b/release/sysinstall/Makefile index 848f279..2a206eb 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 d361580..0c13571 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 730f3b2..e3ca133 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 7208994..70cf576 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 848f279..2a206eb 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 d361580..0c13571 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 730f3b2..e3ca133 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 7208994..70cf576 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 848f279..2a206eb 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 d361580..0c13571 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 730f3b2..e3ca133 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 7208994..70cf576 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); |