diff options
author | jkh <jkh@FreeBSD.org> | 1994-11-02 06:19:53 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1994-11-02 06:19:53 +0000 |
commit | ab9dc068dedc4eb9cd49a9b3a61a283326223319 (patch) | |
tree | 601b7f45d13a319df0e9447468c61f687ef5ab39 /sbin/sysinstall/stage1.c | |
parent | 0869125001f606a02f3ef175fefd0ec42095a6ec (diff) | |
download | FreeBSD-src-ab9dc068dedc4eb9cd49a9b3a61a283326223319.zip FreeBSD-src-ab9dc068dedc4eb9cd49a9b3a61a283326223319.tar.gz |
Get stage0 and stage5 working.
Try to reformat this code to be a little more human. Weird europeans
have been writing this, and can't even seem to agree a single coding
style for more than 4 consecutive lines! :-)
Diffstat (limited to 'sbin/sysinstall/stage1.c')
-rw-r--r-- | sbin/sysinstall/stage1.c | 476 |
1 files changed, 241 insertions, 235 deletions
diff --git a/sbin/sysinstall/stage1.c b/sbin/sysinstall/stage1.c index 8c1a3ef..bcd6d84 100644 --- a/sbin/sysinstall/stage1.c +++ b/sbin/sysinstall/stage1.c @@ -61,73 +61,74 @@ char boot2[] = BOOT2; int alloc_memory() { - int i; - - scratch = (char *) calloc(SCRATCHSIZE, sizeof(char)); - if (!scratch) - return(-1); - - errmsg = (char *) calloc(ERRMSGSIZE, sizeof(char)); - if (!errmsg) - return(-1); - - avail_disklabels = (struct disklabel *) calloc(MAX_NO_DISKS, sizeof(struct disklabel)); - if (!avail_disklabels) - return(-1); - - avail_fds = (int *) calloc(MAX_NO_DISKS, sizeof(int)); - if (!avail_fds) - return(-1); - - avail_disknames = (unsigned char **) calloc(MAX_NO_DISKS, sizeof(char *)); - if (!avail_disknames) - return(-1); - for (i=0;i<MAX_NO_DISKS;i++) { - avail_disknames[i] = (char *) calloc(15, sizeof(char)); - if (!avail_disknames[i]) - return(-1); - } + int i; + + scratch = (char *) calloc(SCRATCHSIZE, sizeof(char)); + if (!scratch) + return(-1); + + errmsg = (char *) calloc(ERRMSGSIZE, sizeof(char)); + if (!errmsg) + return(-1); + + avail_disklabels = (struct disklabel *)calloc(MAX_NO_DISKS, + sizeof(struct disklabel)); + if (!avail_disklabels) + return(-1); + + avail_fds = (int *)calloc(MAX_NO_DISKS, sizeof(int)); + if (!avail_fds) + return(-1); + + avail_disknames = (unsigned char **)calloc(MAX_NO_DISKS, sizeof(char *)); + if (!avail_disknames) + return(-1); + for (i = 0; i < MAX_NO_DISKS; i++) { + avail_disknames[i] = (char *)calloc(15, sizeof(char)); + if (!avail_disknames[i]) + return(-1); + } - options = (unsigned char **) calloc(MAX_NO_DISKS, sizeof(char *)); - if (!options) - return(-1); - for (i=0;i<MAX_NO_DISKS;i++) { - options[i] = (char *) calloc(100, sizeof(char)); - if (!options[i]) - return(-1); - } + options = (unsigned char **)calloc(MAX_NO_DISKS, sizeof(char *)); + if (!options) + return(-1); + for (i = 0; i < MAX_NO_DISKS; i++) { + options[i] = (char *)calloc(100, sizeof(char)); + if (!options[i]) + return(-1); + } - mbr = (struct mbr *) malloc(sizeof(struct mbr)); - if (!mbr) - return(-1); + mbr = (struct mbr *) malloc(sizeof(struct mbr)); + if (!mbr) + return(-1); - bootblocks = (char *) malloc(BBSIZE); - if (!bootblocks) - return(-1); + bootblocks = (char *) malloc(BBSIZE); + if (!bootblocks) + return(-1); - return(0); + return(0); } void free_memory() { - int i; + int i; - free(scratch); - free(errmsg); - free(avail_disklabels); - free(avail_fds); + free(scratch); + free(errmsg); + free(avail_disklabels); + free(avail_fds); - for (i=0;i<MAX_NO_DISKS;i++) - free(avail_disknames[i]); - free(avail_disknames); + for (i = 0; i < MAX_NO_DISKS; i++) + free(avail_disknames[i]); + free(avail_disknames); - for (i=0;i<MAX_NO_DISKS;i++) - free(options[i]); - free(options); + for (i = 0; i < MAX_NO_DISKS; i++) + free(options[i]); + free(options); - free(mbr); - free(bootblocks); + free(mbr); + free(bootblocks); } @@ -143,7 +144,7 @@ query_disks() struct disklabel dl; int fd; - for(i=0;i<MAX_NO_DISKS;i++) + for(i = 0; i < MAX_NO_DISKS; i++) if(Dname[i]) { close(Dfd[i]); Dfd[i] = 0; free(Dlbl[i]); Dlbl[i] = 0; @@ -152,10 +153,10 @@ query_disks() Ndisk = 0; - for (j=0; device_list[j]; j++) { - for (i=0;i<10;i++) { - sprintf(diskname,"%s%d",device_list[j],i); - sprintf(disk,"/dev/r%sd",diskname); + for (j = 0; device_list[j]; j++) { + for (i = 0; i < 10; i++) { + sprintf(diskname, "%s%d", device_list[j], i); + sprintf(disk, "/dev/r%sd", diskname); if (stat(disk, &st) || !(st.st_mode & S_IFCHR)) continue; if ((fd = open(disk, O_RDWR)) == -1) @@ -163,10 +164,10 @@ query_disks() if (ioctl(fd, DIOCGDINFO, &dl) == -1) { close(fd); continue; - } + } Dlbl[Ndisk] = Malloc(sizeof dl); memcpy(Dlbl[Ndisk], &dl, sizeof dl); - Dname[Ndisk]=StrAlloc(diskname); + Dname[Ndisk] = StrAlloc(diskname); Dfd[Ndisk] = fd; Ndisk++; if(Ndisk == MAX_NO_DISKS) @@ -178,209 +179,213 @@ query_disks() int select_disk() { - int i; - int valid; - - do { - valid = 1; - sprintf(scratch,"There are %d disks available for installation: ",no_disks); - - for (i=0;i<no_disks;i++) { - sprintf(options[(i*2)], "%d",i+1); - sprintf(options[(i*2)+1], "%s, (%dMb) -> %s",avail_disklabels[i].d_typename,disk_size(&avail_disklabels[i]),avail_disknames[i]); - } + int i; + int valid; + + do { + valid = 1; + sprintf(scratch,"There are %d disks available for installation: ", + no_disks); + + for (i = 0; i < no_disks; i++) { + sprintf(options[(i*2)], "%d",i+1); + sprintf(options[(i*2)+1], "%s, (%dMb) -> %s", + avail_disklabels[i].d_typename, + disk_size(&avail_disklabels[i]), + avail_disknames[i]); + } - if (dialog_menu("FreeBSD Installation", scratch, 10, 75, 5, no_disks, options, selection)) { - dialog_clear(); - sprintf(scratch,"\n\n\nYou did not select a valid disk.\n\n"); - AskAbort(scratch); - valid = 0; - } - dialog_clear(); - } while (!valid); - return(atoi(selection) - 1); + if (dialog_menu("FreeBSD Installation", scratch, 10, 75, 5, no_disks, + options, selection)) { + dialog_clear(); + sprintf(scratch,"\n\n\nYou did not select a valid disk.\n\n"); + AskAbort(scratch); + valid = 0; + } + dialog_clear(); + } while (!valid); + return(atoi(selection) - 1); } int select_partition(int disk) { - int valid; - int i; - int choice; - - do { - valid = 1; + int valid; + int i; + int choice; + + do { + valid = 1; + whole_disk = 0; + + sprintf(scratch,"Select one of the following areas to install to:"); + sprintf(options[0], "%d", 0); + sprintf(options[1], "%s, (%dMb)", "Install to entire disk", + disk_size(&avail_disklabels[inst_disk])); + for (i=0; i < NDOSPART; i++) { + sprintf(options[(i*2)+2], "%d",i+1); + sprintf(options[(i*2)+3], "%s, (%ldMb)", + part_type(mbr->dospart[i].dp_typ), + mbr->dospart[i].dp_size * 512 / (1024 * 1024)); + } + if (dialog_menu(TITLE, + scratch, 10, 75, 5, 5, options, selection)) { + sprintf(scratch,"You did not select a valid partition"); + dialog_clear(); + AskAbort(scratch); + valid = 0; + } + dialog_clear(); + choice = atoi(selection) - 1; + if (choice == -1) { + whole_disk = 1; + choice = 0; + if (dialog_yesno(TITLE, "\n\nInstalling to the whole disk will erase all its current data.\n\nAre you sure you want to do this?", 10, 75)) { + valid = 0; whole_disk = 0; - - sprintf(scratch,"Select one of the following areas to install to:"); - sprintf(options[0], "%d", 0); - sprintf(options[1], "%s, (%dMb)", "Install to entire disk", - disk_size(&avail_disklabels[inst_disk])); - for (i=0; i < NDOSPART; i++) { - sprintf(options[(i*2)+2], "%d",i+1); - sprintf(options[(i*2)+3], "%s, (%ldMb)", - part_type(mbr->dospart[i].dp_typ), - mbr->dospart[i].dp_size * 512 / (1024 * 1024)); - } - if (dialog_menu(TITLE, - scratch, 10, 75, 5, 5, options, selection)) { - sprintf(scratch,"You did not select a valid partition"); - dialog_clear(); - AskAbort(scratch); - valid = 0; - } - dialog_clear(); - choice = atoi(selection) - 1; - if (choice == -1) { - whole_disk = 1; - choice = 0; - if (dialog_yesno(TITLE, "\n\nInstalling to the whole disk will erase all its current data.\n\nAre you sure you want to do this?", 10, 75)) { - valid = 0; - whole_disk = 0; - } - } - dialog_clear(); - } while (!valid); - - return(choice); + } + } + dialog_clear(); + } while (!valid); + return(choice); } void stage1() { - int i,j; - int ok = 0; - int ready = 0; - - query_disks(); - while (!ready) { - clear(); standend(); - j = 0; - mvprintw(j++,0,"%s -- Diskspace editor",TITLE); - j++; - mvprintw(j++,0,"Disks Total FreeBSD "); - j++; - for(i=0;i<MAX_NO_DISKS;i++) { - if(!Dname[i]) - continue; - mvprintw(j++,0,"%2d: %-6s %5lu MB %5lu MB", - i, - Dname[i], - PartMb(Dlbl[i],RAWPART), - PartMb(Dlbl[i],OURPART) ); - } - j++; - mvprintw(j++,0,"Filesystems Type Size Mountpoint"); - j++; - for(i=0;i<MAX_NO_FS;i++) { - if(!Fname[i]) - continue; - mvprintw(j++,0,"%2d: %-5s %-5s %5lu MB %-s", - i,Fname[i],Ftype[i],Fsize[i],Fmount[i]); - } + int i,j; + int ok = 0; + int ready = 0; + + query_disks(); + while (!ready) { + clear(); standend(); + j = 0; + mvprintw(j++, 0, "%s -- Diskspace editor", TITLE); + j++; + mvprintw(j++, 0, "Disks Total FreeBSD "); + j++; + for(i = 0; i < MAX_NO_DISKS; i++) { + if(!Dname[i]) + continue; + mvprintw(j++, 0, "%2d: %-6s %5lu MB %5lu MB", + i, + Dname[i], + PartMb(Dlbl[i],RAWPART), + PartMb(Dlbl[i],OURPART)); + } + j++; + mvprintw(j++, 0, "Filesystems Type Size Mountpoint"); + j++; + for(i = 0; i < MAX_NO_FS; i++) { + if(!Fname[i]) + continue; + mvprintw(j++, 0, "%2d: %-5s %-5s %5lu MB %-s", + i, Fname[i], Ftype[i], Fsize[i], Fmount[i]); + } - mvprintw(21,0,"Commands available:"); - mvprintw(22,0,"(F)disk (D)isklabel (Q)uit"); - mvprintw(23,0,"Enter Command> "); - i = getch(); - switch(i) { - case 'q': case 'Q': - return; - case 'f': case 'F': - Fdisk(); - query_disks(); - break; - case 'd': case 'D': - DiskLabel(); - break; - default: - beep(); - } + mvprintw(21, 0, "Commands available:"); + mvprintw(22, 0, "(F)disk (D)isklabel (Q)uit"); + mvprintw(23, 0, "Enter Command> "); + i = getch(); + switch(i) { + case 'q': case 'Q': + return; + case 'f': case 'F': + Fdisk(); + query_disks(); + break; + case 'd': case 'D': + DiskLabel(); + break; + default: + beep(); } + } - for (i=0; Dname[i]; i++) - close(Dfd[i]); - return; + for (i = 0; Dname[i]; i++) + close(Dfd[i]); + return; } #if 0 while (!ready) { - ready = 1; - - inst_disk = select_disk(); - - if (read_mbr(avail_fds[inst_disk], mbr) == -1) { - sprintf(scratch, "The following error occured while trying\nto read the master boot record:\n\n%s\nIn order to install FreeBSD a new master boot record\nwill have to be written which will mean all current\ndata on the hard disk will be lost.", errmsg); - ok = 0; - while (!ok) { - AskAbort(scratch); - if (!dialog_yesno(TITLE, "Are you sure you wish to proceed?", - 10, 75)) { - dialog_clear(); - if (clear_mbr(mbr, boot1) == -1) { - sprintf(scratch, "\n\nCouldn't create new master boot record.\n\n%s", errmsg); - Fatal(scratch);; - } - ok = 1; - } - dialog_clear(); - } - } - - if (custom_install) - if (!dialog_yesno(TITLE, "Do you wish to edit the DOS partition table?", - 10, 75)) { - dialog_clear(); - edit_mbr(mbr, &avail_disklabels[inst_disk]); - } + ready = 1; - dialog_clear(); - inst_part = select_partition(inst_disk); + inst_disk = select_disk(); + if (read_mbr(avail_fds[inst_disk], mbr) == -1) { + sprintf(scratch, "The following error occured while trying\nto read the master boot record:\n\n%s\nIn order to install FreeBSD a new master boot record\nwill have to be written which will mean all current\ndata on the hard disk will be lost.", errmsg); ok = 0; - while (!ok) { - if (build_mbr(mbr, boot1, &avail_disklabels[inst_disk]) != -1) { - ready = 1; - ok = 1; - } else { - sprintf(scratch, "The DOS partition table is inconsistent.\n\n%s\nDo you wish to edit it by hand?", errmsg); - if (!dialog_yesno(TITLE, scratch, 10, 75)) { - dialog_clear(); - edit_mbr(mbr, &avail_disklabels[inst_disk]); - } else { - dialog_clear(); - AskAbort("Installation cannot proceed without\na valid master boot record\n"); - ok = 1; - ready = 0; - } - } + while (!ok) { + AskAbort(scratch); + if (!dialog_yesno(TITLE, + "Are you sure you wish to proceed?", + 10, 75)) { dialog_clear(); + if (clear_mbr(mbr, boot1) == -1) { + sprintf(scratch, "\n\nCouldn't create new master boot record.\n\n%s", errmsg); + Fatal(scratch);; + } + ok = 1; + } + dialog_clear(); + } + } + if (custom_install) + if (!dialog_yesno(TITLE, "Do you wish to edit the DOS partition table?", + 10, 75)) { + dialog_clear(); + edit_mbr(mbr, &avail_disklabels[inst_disk]); } - if (ready) { - default_disklabel(&avail_disklabels[inst_disk], - mbr->dospart[inst_part].dp_size, - mbr->dospart[inst_part].dp_start); - dialog_msgbox(TITLE, "This is an experimental disklabel configuration\nmenu. It doesn't perform any validation of the entries\nas yet so BE SURE YOU TYPE THINGS CORRECTLY.\n\n Hit escape to quit the editor.\n\nThere may be some delay exiting because of a dialog bug", 20,70,1); + dialog_clear(); + inst_part = select_partition(inst_disk); + + ok = 0; + while (!ok) { + if (build_mbr(mbr, boot1, &avail_disklabels[inst_disk]) != -1) { + ready = 1; + ok = 1; + } else { + sprintf(scratch, "The DOS partition table is inconsistent.\n\n%s\nDo you wish to edit it by hand?", errmsg); + if (!dialog_yesno(TITLE, scratch, 10, 75)) { dialog_clear(); - edit_disklabel(&avail_disklabels[inst_disk]); - - build_disklabel(&avail_disklabels[inst_disk]); - if (build_bootblocks(&avail_disklabels[inst_disk]) == -1) - Fatal(errmsg); + edit_mbr(mbr, &avail_disklabels[inst_disk]); + } else { + dialog_clear(); + AskAbort("Installation cannot proceed without\na valid master boot record\n"); + ok = 1; + ready = 0; + } } + dialog_clear(); + } - /* ready could have been reset above */ - if (ready) { - if (dialog_yesno(TITLE, "We are now ready to format the hard disk for FreeBSD.\n\nSome or all of the disk will be overwritten during this process.\n\nAre you sure you wish to proceed ?", 10, 75)) { - dialog_clear(); - AskAbort("Do you want to quit?"); - ready = 0; - } - dialog_clear(); + if (ready) { + default_disklabel(&avail_disklabels[inst_disk], + mbr->dospart[inst_part].dp_size, + mbr->dospart[inst_part].dp_start); + dialog_msgbox(TITLE, "This is an experimental disklabel configuration\nmenu. It doesn't perform any validation of the entries\nas yet so BE SURE YOU TYPE THINGS CORRECTLY.\n\n Hit escape to quit the editor.\n\nThere may be some delay exiting because of a dialog bug", 20,70,1); + dialog_clear(); + edit_disklabel(&avail_disklabels[inst_disk]); + + build_disklabel(&avail_disklabels[inst_disk]); + if (build_bootblocks(&avail_disklabels[inst_disk]) == -1) + Fatal(errmsg); + } + + /* ready could have been reset above */ + if (ready) { + if (dialog_yesno(TITLE, "We are now ready to format the hard disk for FreeBSD.\n\nSome or all of the disk will be overwritten during this process.\n\nAre you sure you wish to proceed ?", 10, 75)) { + dialog_clear(); + AskAbort("Do you want to quit?"); + ready = 0; } + dialog_clear(); + } } - if(getenv("STAGE0")) { - Fatal("We stop here"); + if (getenv("STAGE0")) { + Fatal("We stop here"); } /* Write master boot record and bootblocks */ if (write_mbr(avail_fds[inst_disk], mbr) == -1) @@ -399,3 +404,4 @@ stage1() } } #endif + |