diff options
author | paul <paul@FreeBSD.org> | 1994-11-18 19:29:01 +0000 |
---|---|---|
committer | paul <paul@FreeBSD.org> | 1994-11-18 19:29:01 +0000 |
commit | b56a203af3388d72d123c1fbae314d011c5dd685 (patch) | |
tree | d1bc987301002fedaf7bd0b1a8b9feadaa6c7f25 /sbin/sysinstall | |
parent | 24b40121fd3814d5470702690b0f65c177337179 (diff) | |
download | FreeBSD-src-b56a203af3388d72d123c1fbae314d011c5dd685.zip FreeBSD-src-b56a203af3388d72d123c1fbae314d011c5dd685.tar.gz |
Update the in-core disklabel when we change the on-disk version.
Fix up the editor links for the disklabel editor.
Correct the display of fields when they're longer than the
viewable length.
Diffstat (limited to 'sbin/sysinstall')
-rw-r--r-- | sbin/sysinstall/bootarea.c | 13 | ||||
-rw-r--r-- | sbin/sysinstall/editor.c | 11 | ||||
-rw-r--r-- | sbin/sysinstall/label.c | 63 | ||||
-rw-r--r-- | sbin/sysinstall/label.h | 78 | ||||
-rw-r--r-- | sbin/sysinstall/mbr.c | 20 |
5 files changed, 116 insertions, 69 deletions
diff --git a/sbin/sysinstall/bootarea.c b/sbin/sysinstall/bootarea.c index 9742864..00d22e2 100644 --- a/sbin/sysinstall/bootarea.c +++ b/sbin/sysinstall/bootarea.c @@ -146,5 +146,18 @@ write_bootblocks(int disk) if (disable_label(fd) == -1) return (-1); + /* Update the in-core label too if possible */ + + if (ioctl(fd, DIOCSDINFO, lbl) < 0) { + sprintf(errmsg, "Couldn't change in-core disklabel for %s\n\n%s", + scratch, strerror(errno)); + return (-1); + } + + if (close(fd) == -1) { + sprintf(errmsg, "Couldn't close device %s\n\n%s", + scratch, strerror(errno)); + return (-1); + } return(0); } diff --git a/sbin/sysinstall/editor.c b/sbin/sysinstall/editor.c index 4b4eee8..42867d4 100644 --- a/sbin/sysinstall/editor.c +++ b/sbin/sysinstall/editor.c @@ -8,13 +8,16 @@ int disp_fields(WINDOW *window, struct field field[], int no_fields) { int i, j; + int len; wattrset(window, dialog_attr); for (i=0; i < no_fields; i++) { - mvwprintw(window, field[i].y, field[i].x, "%s", field[i].field); - j=strlen(field[i].field); - if (j < field[i].width) - for (; j < field[i].width; j++) + len=strlen(field[i].field); + wmove(window, field[i].y, field[i].x); + for (j=0; j < field[i].width; j++) + if (j < len) + waddch(window, field[i].field[j]); + else waddch(window, ' '); } wrefresh(window); diff --git a/sbin/sysinstall/label.c b/sbin/sysinstall/label.c index f6ab646..73b786b 100644 --- a/sbin/sysinstall/label.c +++ b/sbin/sysinstall/label.c @@ -105,7 +105,7 @@ int edit_disklabel(int disk) { WINDOW *window; - int key; + int key = 0; int next; int cur_field; int i; @@ -114,19 +114,45 @@ edit_disklabel(int disk) int nsects; int avail_sects; - lbl->d_magic = DISKMAGIC; - bcopy("INSTALLATION", lbl->d_typename, strlen("INSTALLATION")); - lbl->d_rpm = 3600; - lbl->d_interleave = 1; - lbl->d_trackskew = 0; - lbl->d_cylskew = 0; - lbl->d_magic2 = DISKMAGIC; - lbl->d_checksum = 0; - lbl->d_bbsize = BBSIZE; - lbl->d_sbsize = SBSIZE; - lbl->d_npartitions = 8; - lbl->d_boot0 = boot1; - lbl->d_boot1 = boot2; + lbl->d_magic = DISKMAGIC; + bcopy("INSTALLATION", lbl->d_typename, strlen("INSTALLATION")); + lbl->d_rpm = 3600; + lbl->d_interleave = 1; + lbl->d_trackskew = 0; + lbl->d_cylskew = 0; + lbl->d_magic2 = DISKMAGIC; + lbl->d_checksum = 0; + lbl->d_bbsize = BBSIZE; + lbl->d_sbsize = SBSIZE; + lbl->d_npartitions = 8; + + /* Inialise the fstab entries */ + for (i=0; i < MAXPARTITIONS; i++) { + disk_list[disk].mounts[i].fs_spec = + (char *)malloc(label_field[i*5].maxlen+1); + if (!disk_list[disk].mounts[i].fs_spec) { + sprintf(errmsg, "Couldn't allocate memory for device mounts\n"); + return (-1); + } + sprintf(disk_list[disk].mounts[i].fs_spec, + "%s%d%s", disk_list[disk].devconf->dc_name, + disk_list[disk].devconf->dc_unit, + partname[i]); + disk_list[disk].mounts[i].fs_mntops = + (char *)malloc(label_field[(i*5)+1].maxlen+1); + if (!disk_list[disk].mounts[i].fs_mntops) { + sprintf(errmsg, "Couldn't allocate memory for mount options\n"); + return (-1); + } + sprintf(disk_list[disk].mounts[i].fs_mntops, "%s", "YES"); + disk_list[disk].mounts[i].fs_file = + (char *)malloc(label_field[(i*5)+4].maxlen+1); + if (!disk_list[disk].mounts[i].fs_file) { + sprintf(errmsg, "Couldn't allocate memory for mount points\n"); + return (-1); + } + sprintf(disk_list[disk].mounts[i].fs_file, "%s", "Not Mounted"); + } if (!(window = newwin(24, 79, 0, 0))) { sprintf(errmsg, "Failed to open window for disklabel editor\n"); @@ -136,13 +162,13 @@ edit_disklabel(int disk) keypad(window, TRUE); draw_box(window, 0, 0, 24, 79, dialog_attr, border_attr); - + + cur_field = 1; while (key != ESC) { for (i=0; i < MAXPARTITIONS; i++) { - sprintf(label_field[(i*5)].field, "%s%d%s", disk_list[disk].devconf->dc_name, - disk_list[disk].devconf->dc_unit, - partname[i]); + sprintf(label_field[(i*5)].field, "%s", + disk_list[disk].mounts[i].fs_spec); sprintf(label_field[(i*5)+1].field, "%s", disk_list[disk].mounts[i].fs_mntops); sprintf(label_field[(i*5)+2].field, "%s", @@ -200,6 +226,7 @@ edit_disklabel(int disk) if (write_bootblocks(disk) == -1) return(-1); + delwin(window); dialog_clear(); return(0); } diff --git a/sbin/sysinstall/label.h b/sbin/sysinstall/label.h index 41c114f..365b6ed 100644 --- a/sbin/sysinstall/label.h +++ b/sbin/sysinstall/label.h @@ -1,44 +1,44 @@ struct field label_field[] = { { 4, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"}, - { 4, 16, 3, 3, 2, -1, -1, -1, -1, "YES"}, - { 4, 27, 20, 20, 3, -1, -1, -1, -1, "MSDOS"}, - { 4, 39, 5, 5, 4, -1, -1, -1, -1, "1000"}, - { 4, 47, 20, 30, 6, -1, -1, -1, -1, "/an/example/mountpoint"}, - { 6, 02, 4, 4, -1, -1, -1, -1, -1, "wd0a"}, - { 6, 16, 3, 3, 7, -1, -1, -1, -1, "YES"}, - { 6, 27, 20, 20, 8, -1, -1, -1, -1, "MSDOS"}, - { 6, 39, 5, 5, 9, -1, -1, -1, -1, "1000"}, - { 6, 47, 20, 30, 11, -1, -1, -1, -1, "/an/example/mountpoint"}, - { 8, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"}, - { 8, 16, 3, 3, 12, -1, -1, -1, -1, "YES"}, - { 8, 27, 20, 20, 13, -1, -1, -1, -1, "MSDOS"}, - { 8, 39, 5, 5, 14, -1, -1, -1, -1, "1000"}, - { 8, 47, 20, 30, 16, -1, -1, -1, -1, "/an/example/mountpoint"}, - {10, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"}, - {10, 16, 3, 3, 17, -1, -1, -1, -1, "YES"}, - {10, 27, 20, 20, 18, -1, -1, -1, -1, "MSDOS"}, - {10, 39, 5, 5, 19, -1, -1, -1, -1, "1000"}, - {10, 47, 20, 30, 21, -1, -1, -1, -1, "/an/example/mountpoint"}, - {12, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"}, - {12, 16, 3, 3, 22, -1, -1, -1, -1, "YES"}, - {12, 27, 20, 20, 23, -1, -1, -1, -1, "MSDOS"}, - {12, 39, 5, 5, 24, -1, -1, -1, -1, "1000"}, - {12, 47, 20, 30, 26, -1, -1, -1, -1, "/an/example/mountpoint"}, - {14, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"}, - {14, 16, 3, 3, 27, -1, -1, -1, -1, "YES"}, - {14, 27, 20, 20, 28, -1, -1, -1, -1, "MSDOS"}, - {14, 39, 5, 5, 29, -1, -1, -1, -1, "1000"}, - {14, 47, 20, 30, 31, -1, -1, -1, -1, "/an/example/mountpoint"}, - {16, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"}, - {16, 16, 3, 3, 32, -1, -1, -1, -1, "YES"}, - {16, 27, 20, 20, 33, -1, -1, -1, -1, "MSDOS"}, - {16, 39, 5, 5, 34, -1, -1, -1, -1, "1000"}, - {16, 47, 20, 30, 36, -1, -1, -1, -1, "/an/example/mountpoint"}, - {18, 02, 10, 10, -1, -1, -1, -1, -1, "wd0a"}, - {18, 16, 3, 3, 37, -1, -1, -1, -1, "YES"}, - {18, 27, 20, 20, 38, -1, -1, -1, -1, "MSDOS"}, - {18, 39, 5, 5, 39, -1, -1, -1, -1, "1000"}, - {18, 47, 20, 30, 1, -1, -1, -1, -1, "/an/example/mountpoint"}, + { 4, 16, 3, 3, 2, 36, 6, -1, 2, "YES"}, + { 4, 27, 6, 30, 3, 37, 7, -1, 3, "MSDOS"}, + { 4, 39, 5, 5, 4, 38, 8, -1, 4, "1000"}, + { 4, 47, 30, 80, 6, 39, 9, -1, 1, "/an/example/mountpoint"}, + { 6, 02, 4, 4, -1, -1, -1, -1, -1, "wd0b"}, + { 6, 16, 3, 3, 7, 1, 11, -1, 7, "YES"}, + { 6, 27, 6, 20, 8, 2, 12, -1, 8, "MSDOS"}, + { 6, 39, 5, 5, 9, 3, 13, -1, 9, "1000"}, + { 6, 47, 30, 80, 11, 4, 14, -1, 6, "/an/example/mountpoint"}, + { 8, 02, 10, 10, -1, -1, -1, -1, -1, "wd0c"}, + { 8, 16, 3, 3, 12, 6, 16, -1, 12, "YES"}, + { 8, 27, 6, 20, 13, 7, 17, -1, 13, "MSDOS"}, + { 8, 39, 5, 5, 14, 8, 18, -1, 14, "1000"}, + { 8, 47, 30, 80, 16, 9, 19, -1, 11, "/an/example/mountpoint"}, + {10, 02, 10, 10, -1, -1, -1, -1, -1, "wd0d"}, + {10, 16, 3, 3, 17, 11, 21, -1, 17, "YES"}, + {10, 27, 6, 20, 18, 12, 22, -1, 18, "MSDOS"}, + {10, 39, 5, 5, 19, 13, 23, -1, 19, "1000"}, + {10, 47, 30, 80, 21, 14, 24, -1, 16, "/an/example/mountpoint"}, + {12, 02, 10, 10, -1, -1, -1, -1, -1, "wd0e"}, + {12, 16, 3, 3, 22, 16, 26, -1, 22, "YES"}, + {12, 27, 6, 20, 23, 17, 27, -1, 23, "MSDOS"}, + {12, 39, 5, 5, 24, 18, 28, -1, 24, "1000"}, + {12, 47, 30, 80, 26, 19, 29, -1, 21, "/an/example/mountpoint"}, + {14, 02, 10, 10, -1, -1, -1, -1, -1, "wd0f"}, + {14, 16, 3, 3, 27, 21, 31, -1, 27, "YES"}, + {14, 27, 6, 20, 28, 22, 32, -1, 28, "MSDOS"}, + {14, 39, 5, 5, 29, 23, 33, -1, 29, "1000"}, + {14, 47, 30, 80, 31, 24, 34, -1, 26, "/an/example/mountpoint"}, + {16, 02, 10, 10, -1, -1, -1, -1, -1, "wd0g"}, + {16, 16, 3, 3, 32, 26, 36, -1, 32, "YES"}, + {16, 27, 6, 20, 33, 27, 37, -1, 33, "MSDOS"}, + {16, 39, 5, 5, 34, 28, 38, -1, 34, "1000"}, + {16, 47, 30, 80, 36, 29, 39, -1, 31, "/an/example/mountpoint"}, + {18, 02, 10, 10, -1, -1, -1, -1, -1, "wd0h"}, + {18, 16, 3, 3, 37, 31, 1, -1, 37, "YES"}, + {18, 27, 6, 20, 38, 32, 2, -1, 38, "MSDOS"}, + {18, 39, 5, 5, 39, 33, 3, -1, 39, "1000"}, + {18, 47, 30, 80, 1, 34, 4, -1, 36, "/an/example/mountpoint"}, { 0, 18, 17, 17, -1, -1, -1, -1, -1, "Disk label editor"}, { 2, 2, 11, 11, -1, -1, -1, -1, -1, "Partition"}, { 2, 14, 8, 8, -1, -1, -1, -1, -1, "Preserve"}, diff --git a/sbin/sysinstall/mbr.c b/sbin/sysinstall/mbr.c index 067998e..c09ab50 100644 --- a/sbin/sysinstall/mbr.c +++ b/sbin/sysinstall/mbr.c @@ -229,13 +229,13 @@ get_geom_values(int disk) int next = 0; struct field field[] = { - {2, 27, 06, 10, 01, 02, 01, -1, -1, "000000"}, - {4, 27, 06, 10, 02, 00, 02, -1, -1, "000000"}, - {6, 27, 06, 10, 00, 01, 00, -1, -1, "000000"}, - {0, 07, 06, 10, -1, -1, -1, -1, -1, "Disk geomtetry parameters"}, - {2, 02, 06, 10, -1, -1, -1, -1, -1, "Number of cylinders:"}, - {4, 02, 06, 10, -1, -1, -1, -1, -1, "Number of tracks (heads):"}, - {6, 02, 06, 10, -1, -1, -1, -1, -1, "Number of sectors:"} + {2, 28, 06, 10, 01, 02, 01, -1, 01, "Unset"}, + {4, 28, 06, 10, 02, 00, 02, -1, 02, "Unset"}, + {6, 28, 06, 10, 00, 01, 00, -1, 00, "Unset"}, + {0, 07, 24, 24, -1, -1, -1, -1, -1, "BIOS geometry parameters"}, + {2, 02, 20, 20, -1, -1, -1, -1, -1, "Number of cylinders:"}, + {4, 02, 25, 25, -1, -1, -1, -1, -1, "Number of tracks (heads):"}, + {6, 02, 18, 18, -1, -1, -1, -1, -1, "Number of sectors:"} }; if (!(window = newwin(10, 40, 5, 20))) { @@ -285,7 +285,9 @@ edit_mbr(int disk) struct mbr *mbr = &disk_list[disk].mbr; /* Confirm disk parameters */ - +#ifdef 0 + dialog_msgbox("BIOS disk geometry values", "In order to setup the boot area of the disk it is necessary to know the BIOS values for the disk geometry i.e. the number of cylinders, heads and sectors. These values may be different form the real geometry of the disk, depending on whether or not your system uses geometry translation. At this stage it is the entries from the BIOS that are needed. If you do not know these they can be found by rebooting the machine and entering th BIOS setup routine. See you BIOS manual for details", -1, -1, 1) +#endif if (get_geom_values(disk) == -1) return(-1); @@ -384,6 +386,8 @@ edit_mbr(int disk) return(-1); } } + + delwin(window); dialog_clear(); return (0); } |