get bootblocks right.

Add mbr and bteasy17 to tst01
read partitions from kernel instead of disk.
Still problems with writing labels, discussing with Bruce.
Extended slices doesn't get written yet.
This commit is contained in:
Poul-Henning Kamp 1995-04-30 11:04:16 +00:00
parent 6d83113dcf
commit 9781a14091
10 changed files with 266 additions and 104 deletions

View File

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: create_chunk.c,v 1.3 1995/04/29 07:21:10 phk Exp $
* $Id: create_chunk.c,v 1.4 1995/04/30 06:09:25 phk Exp $
*
*/
@ -128,7 +128,6 @@ int
Create_Chunk(struct disk *d, u_long offset, u_long size, chunk_e type, int subtype, u_long flags)
{
int i;
u_long l1,l2,end = offset + size;
i = Add_Chunk(d,offset,size,"X",type,subtype,flags);
Fixup_Names(d);

View File

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: disk.c,v 1.6 1995/04/30 06:09:26 phk Exp $
* $Id: disk.c,v 1.7 1995/04/30 07:30:43 phk Exp $
*
*/
@ -65,6 +65,12 @@ Int_Open_Disk(char *name, u_long size)
return 0;
}
for(i=0;i<ds.dss_nslices;i++)
if(ds.dss_slices[i].ds_openmask)
printf(" open(%d)=0x%2x",
i,ds.dss_slices[i].ds_openmask);
printf("\n");
if (!size)
size = ds.dss_slices[WHOLE_DISK_SLICE].ds_size;
@ -97,7 +103,7 @@ Int_Open_Disk(char *name, u_long size)
if (Add_Chunk(d, 0, 1, "-",reserved,0,0))
warn("Failed to add MBR chunk");
for(i=BASE_SLICE;i < 12 && i<ds.dss_nslices;i++) {
for(i=BASE_SLICE;i<ds.dss_nslices;i++) {
char sname[20];
chunk_e ce;
u_long flags=0;
@ -105,12 +111,13 @@ Int_Open_Disk(char *name, u_long size)
if (! ds.dss_slices[i].ds_size)
continue;
sprintf(sname,"%ss%d",name,i-1);
subtype = ds.dss_slices[i].ds_type;
switch (ds.dss_slices[i].ds_type) {
case 0xa5:
ce = freebsd;
break;
case 0x1:
case 0x6:
case 0x4:
ce = fat;
break;
case DOSPTYP_EXTENDED:
@ -118,7 +125,6 @@ Int_Open_Disk(char *name, u_long size)
break;
default:
ce = foo;
subtype = -ds.dss_slices[i].ds_type;
break;
}
flags |= CHUNK_ALIGN;
@ -129,45 +135,56 @@ Int_Open_Disk(char *name, u_long size)
if (Add_Chunk(d,ds.dss_slices[i].ds_offset,
1, "-",reserved, subtype, flags))
warn("failed to add MBR chunk for slice %d",i - 1);
if (ds.dss_slices[i].ds_type == 0xa5) {
struct disklabel *dl;
if (ds.dss_slices[i].ds_type != 0xa5)
continue;
{
struct disklabel dl;
char pname[20];
int j,k;
dl = read_disklabel(fd,
ds.dss_slices[i].ds_offset + LABELSECTOR);
if(dl) {
char pname[20];
int j;
u_long l;
if (dl->d_partitions[RAW_PART].p_offset == 0 &&
dl->d_partitions[RAW_PART].p_size ==
ds.dss_slices[i].ds_size)
l = ds.dss_slices[i].ds_offset;
else
l = 0;
for(j=0; j < dl->d_npartitions; j++) {
sprintf(pname,"%s%c",sname,j+'a');
if (j == RAW_PART || j == 3)
continue;
if (!dl->d_partitions[j].p_size)
continue;
if (Add_Chunk(d,
dl->d_partitions[j].p_offset +
l,
dl->d_partitions[j].p_size,
pname,part,0,0))
warn(
"Failed to add chunk for partition %c [%lu,%lu]",
j + 'a',dl->d_partitions[j].p_offset,dl->d_partitions[j].p_size);
}
sprintf(pname,"%sd",sname);
if (dl->d_partitions[3].p_size)
Add_Chunk(d,
dl->d_partitions[3].p_offset +
l,
dl->d_partitions[3].p_size,
pname,part,0,0);
free(dl);
strcpy(pname,"/dev/r");
strcat(pname,sname);
j = open(pname,O_RDONLY);
if (j < 0) {
warn("open(%s)",pname);
continue;
}
k = ioctl(j,DIOCGDINFO,&dl);
if (k < 0) {
warn("ioctl(%s,DIOCGDINFO)",pname);
close(j);
continue;
}
close(j);
for(j=0; j <= dl.d_npartitions; j++) {
if (j == RAW_PART)
continue;
if (j == 3)
continue;
if (j == dl.d_npartitions) {
j = 3;
dl.d_npartitions=0;
}
if (!dl.d_partitions[j].p_size)
continue;
if (dl.d_partitions[j].p_size +
dl.d_partitions[j].p_offset >
ds.dss_slices[i].ds_size)
continue;
sprintf(pname,"%s%c",sname,j+'a');
if (Add_Chunk(d,
dl.d_partitions[j].p_offset +
ds.dss_slices[i].ds_offset,
dl.d_partitions[j].p_size,
pname,part,
dl.d_partitions[j].p_fstype,
0) && j != 3)
warn(
"Failed to add chunk for partition %c [%lu,%lu]",
j + 'a',dl.d_partitions[j].p_offset,
dl.d_partitions[j].p_size);
}
}
}
close(fd);
@ -216,8 +233,8 @@ Clone_Disk(struct disk *d)
memcpy(d2->boot1,d->boot1,512);
}
if(d2->boot2) {
d2->boot2 = malloc(512*7);
memcpy(d2->boot2,d->boot2,512*7);
d2->boot2 = malloc(512*15);
memcpy(d2->boot2,d->boot2,512*15);
}
return d2;
}
@ -284,7 +301,7 @@ Set_Boot_Blocks(struct disk *d, u_char *b1, u_char *b2)
if(!d->boot1) err(1,"malloc failed");
memcpy(d->boot1,b1,512);
if (d->boot2) free(d->boot2);
d->boot2 = malloc(7*512);
d->boot2 = malloc(15*512);
if(!d->boot2) err(1,"malloc failed");
memcpy(d->boot2,b2,7*512);
memcpy(d->boot2,b2,15*512);
}

View File

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: libdisk.h,v 1.5 1995/04/29 07:21:11 phk Exp $
* $Id: libdisk.h,v 1.6 1995/04/30 06:09:27 phk Exp $
*
*/
@ -187,6 +187,7 @@ struct disklabel * read_disklabel(int, daddr_t);
u_short dkcksum(struct disklabel *);
struct chunk * Find_Mother_Chunk(struct chunk *, u_long , u_long , chunk_e);
struct disk * Int_Open_Disk(char *name, u_long size);
void Fixup_Names(struct disk *);
#define dprintf printf

View File

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: tst01.c,v 1.5 1995/04/29 07:21:13 phk Exp $
* $Id: tst01.c,v 1.6 1995/04/30 06:09:28 phk Exp $
*
*/
@ -24,6 +24,55 @@
CHAR_N;
u_char mbr[] = {
250,51,192,142,208,188,0,124,139,244,80,7,80,31,251,252,191,0,6,185,0,1,
242,165,234,29,6,0,0,190,190,7,179,4,128,60,128,116,14,128,60,0,117,28,
131,198,16,254,203,117,239,205,24,139,20,139,76,2,139,238,131,198,16,254,
203,116,26,128,60,0,116,244,190,139,6,172,60,0,116,11,86,187,7,0,180,14,
205,16,94,235,240,235,254,191,5,0,187,0,124,184,1,2,87,205,19,95,115,12,
51,192,205,19,79,117,237,190,163,6,235,211,190,194,6,191,254,125,129,61,
85,170,117,199,139,245,234,0,124,0,0,73,110,118,97,108,105,100,32,112,97,
114,116,105,116,105,111,110,32,116,97,98,108,101,0,69,114,114,111,114,32,
108,111,97,100,105,110,103,32,111,112,101,114,97,116,105,110,103,32,115,
121,115,116,101,109,0,77,105,115,115,105,110,103,32,111,112,101,114,97,
116,105,110,103,32,115,121,115,116,101,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,
1,1,0,4,15,63,60,63,0,0,0,241,239,0,0,0,0,1,61,5,15,63,243,48,240,0,0,144,
208,2,0,0,0,1,244,165,15,63,170,192,192,3,0,144,208,2,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,85,170
};
u_char bteasy17[] = {
51,192,142,192,142,216,142,208,188,0,124,252,139,244,191,0,6,185,0,1,242,
165,234,96,6,0,0,139,213,88,162,72,7,60,53,116,28,180,16,246,228,5,174,
4,150,246,68,4,255,116,62,198,4,128,232,218,0,138,116,1,139,76,2,235,8,
232,207,0,185,1,0,50,209,187,0,124,184,1,2,205,19,114,30,129,191,254,1,
85,170,117,22,234,0,124,0,0,128,250,129,116,2,178,128,139,234,66,128,242,
179,136,22,58,7,191,190,7,185,4,0,198,6,45,7,49,50,246,136,45,138,69,4,
60,0,116,35,60,5,116,31,254,198,190,42,7,232,113,0,190,72,7,70,70,139,28,
10,255,116,5,50,125,4,117,243,141,183,114,7,232,90,0,131,199,16,254,6,45,
7,226,203,128,62,117,4,2,116,11,190,59,7,10,246,117,10,205,24,235,172,190,
42,7,232,57,0,232,54,0,50,228,205,26,139,218,131,195,96,180,1,205,22,180,
0,117,11,205,26,59,211,114,242,160,72,7,235,10,205,22,138,196,60,28,116,
243,4,246,60,49,114,214,60,53,119,210,80,190,40,7,187,27,6,83,252,172,80,
36,127,180,14,205,16,88,168,128,116,242,195,86,184,1,3,187,0,6,185,1,0,
50,246,205,19,94,198,6,72,7,63,195,13,138,13,10,70,48,32,46,32,46,32,46,
160,100,105,115,107,32,49,13,10,10,68,101,102,97,117,108,116,58,32,70,63,
160,0,1,0,4,0,6,3,7,7,10,10,99,14,100,14,101,20,128,20,129,25,130,30,147,
36,165,39,159,43,117,47,82,47,219,50,64,55,242,61,0,100,111,243,72,80,70,
211,79,115,178,85,110,105,248,78,111,118,101,108,236,77,105,110,105,248,
76,105,110,117,248,65,109,111,101,98,225,66,83,196,66,83,68,233,80,67,73,
216,67,80,205,86,101,110,105,248,68,111,115,115,101,227,63,191,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,85,170
};
int
main(int argc, char **argv)
{
@ -46,7 +95,7 @@ main(int argc, char **argv)
sprintf(myprompt,"%s %s> ",argv[0],argv[1]);
while(1) {
printf("\n\n\n\n");
printf("--==##==--\n");
Debug_Disk(d);
p = CheckRules(d);
if (p) {
@ -140,6 +189,14 @@ main(int argc, char **argv)
d = db;
continue;
}
if (!strcasecmp(*cmds,"bteasy")) {
Set_Boot_Mgr(d,bteasy17);
continue;
}
if (!strcasecmp(*cmds,"mbr")) {
Set_Boot_Mgr(d,mbr);
continue;
}
if (!strcasecmp(*cmds,"boot")) {
extern u_char boot1[],boot2[];
Set_Boot_Blocks(d,boot1,boot2);
@ -158,10 +215,13 @@ main(int argc, char **argv)
printf("\tallfreebsd\n");
printf("\tbios cyl hd sect\n");
printf("\tboot\n");
printf("\tbteasy17\n");
printf("\tcollapse [pointer]\n");
printf("\tcreate offset size enum subtype flags\n");
printf("\t\tsubtype(part): swap=1, ffs=7\n");
printf("\tdelete pointer\n");
printf("\tlist\n");
printf("\tmbr\n");
printf("\tphys cyl hd sect\n");
printf("\tquit\n");
printf("\tread [disk]\n");

View File

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: write_disk.c,v 1.2 1995/04/30 06:09:29 phk Exp $
* $Id: write_disk.c,v 1.3 1995/04/30 07:30:45 phk Exp $
*
*/
@ -64,6 +64,7 @@ Write_FreeBSD(int fd, struct disk *new, struct disk *old, struct chunk *c1)
}
dl->d_partitions[j].p_size = c2->size;
dl->d_partitions[j].p_offset = c2->offset - c1->offset;
dl->d_partitions[j].p_fstype = c2->subtype;
}
@ -71,10 +72,12 @@ Write_FreeBSD(int fd, struct disk *new, struct disk *old, struct chunk *c1)
strcpy(dl->d_typename,c1->name);
dl->d_secsize = 512;
dl->d_secperunit = new->chunks->size;
dl->d_secpercyl = new->real_cyl ? new->real_cyl : new->bios_cyl;
dl->d_ntracks = new->real_hd ? new->real_hd : new->bios_hd;
dl->d_nsectors = new->real_sect ? new->real_sect : new->bios_sect;
dl->d_secpercyl = dl->d_ntracks * dl->d_nsectors;
dl->d_npartitions = MAXPARTITIONS;
@ -97,7 +100,6 @@ int
Write_Extended(int fd, struct disk *new, struct disk *old, struct chunk *c1)
{
printf("--> Write_Extended()\n");
Print_Chunk(c1);
return 0;
}
@ -186,6 +188,8 @@ Write_Disk(struct disk *d1)
case foo:
dp[j].dp_typ = - c1->subtype;
break;
default:
break;
}
}
for(i=0;i<NDOSPART;i++)

View File

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: create_chunk.c,v 1.3 1995/04/29 07:21:10 phk Exp $
* $Id: create_chunk.c,v 1.4 1995/04/30 06:09:25 phk Exp $
*
*/
@ -128,7 +128,6 @@ int
Create_Chunk(struct disk *d, u_long offset, u_long size, chunk_e type, int subtype, u_long flags)
{
int i;
u_long l1,l2,end = offset + size;
i = Add_Chunk(d,offset,size,"X",type,subtype,flags);
Fixup_Names(d);

View File

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: disk.c,v 1.6 1995/04/30 06:09:26 phk Exp $
* $Id: disk.c,v 1.7 1995/04/30 07:30:43 phk Exp $
*
*/
@ -65,6 +65,12 @@ Int_Open_Disk(char *name, u_long size)
return 0;
}
for(i=0;i<ds.dss_nslices;i++)
if(ds.dss_slices[i].ds_openmask)
printf(" open(%d)=0x%2x",
i,ds.dss_slices[i].ds_openmask);
printf("\n");
if (!size)
size = ds.dss_slices[WHOLE_DISK_SLICE].ds_size;
@ -97,7 +103,7 @@ Int_Open_Disk(char *name, u_long size)
if (Add_Chunk(d, 0, 1, "-",reserved,0,0))
warn("Failed to add MBR chunk");
for(i=BASE_SLICE;i < 12 && i<ds.dss_nslices;i++) {
for(i=BASE_SLICE;i<ds.dss_nslices;i++) {
char sname[20];
chunk_e ce;
u_long flags=0;
@ -105,12 +111,13 @@ Int_Open_Disk(char *name, u_long size)
if (! ds.dss_slices[i].ds_size)
continue;
sprintf(sname,"%ss%d",name,i-1);
subtype = ds.dss_slices[i].ds_type;
switch (ds.dss_slices[i].ds_type) {
case 0xa5:
ce = freebsd;
break;
case 0x1:
case 0x6:
case 0x4:
ce = fat;
break;
case DOSPTYP_EXTENDED:
@ -118,7 +125,6 @@ Int_Open_Disk(char *name, u_long size)
break;
default:
ce = foo;
subtype = -ds.dss_slices[i].ds_type;
break;
}
flags |= CHUNK_ALIGN;
@ -129,45 +135,56 @@ Int_Open_Disk(char *name, u_long size)
if (Add_Chunk(d,ds.dss_slices[i].ds_offset,
1, "-",reserved, subtype, flags))
warn("failed to add MBR chunk for slice %d",i - 1);
if (ds.dss_slices[i].ds_type == 0xa5) {
struct disklabel *dl;
if (ds.dss_slices[i].ds_type != 0xa5)
continue;
{
struct disklabel dl;
char pname[20];
int j,k;
dl = read_disklabel(fd,
ds.dss_slices[i].ds_offset + LABELSECTOR);
if(dl) {
char pname[20];
int j;
u_long l;
if (dl->d_partitions[RAW_PART].p_offset == 0 &&
dl->d_partitions[RAW_PART].p_size ==
ds.dss_slices[i].ds_size)
l = ds.dss_slices[i].ds_offset;
else
l = 0;
for(j=0; j < dl->d_npartitions; j++) {
sprintf(pname,"%s%c",sname,j+'a');
if (j == RAW_PART || j == 3)
continue;
if (!dl->d_partitions[j].p_size)
continue;
if (Add_Chunk(d,
dl->d_partitions[j].p_offset +
l,
dl->d_partitions[j].p_size,
pname,part,0,0))
warn(
"Failed to add chunk for partition %c [%lu,%lu]",
j + 'a',dl->d_partitions[j].p_offset,dl->d_partitions[j].p_size);
}
sprintf(pname,"%sd",sname);
if (dl->d_partitions[3].p_size)
Add_Chunk(d,
dl->d_partitions[3].p_offset +
l,
dl->d_partitions[3].p_size,
pname,part,0,0);
free(dl);
strcpy(pname,"/dev/r");
strcat(pname,sname);
j = open(pname,O_RDONLY);
if (j < 0) {
warn("open(%s)",pname);
continue;
}
k = ioctl(j,DIOCGDINFO,&dl);
if (k < 0) {
warn("ioctl(%s,DIOCGDINFO)",pname);
close(j);
continue;
}
close(j);
for(j=0; j <= dl.d_npartitions; j++) {
if (j == RAW_PART)
continue;
if (j == 3)
continue;
if (j == dl.d_npartitions) {
j = 3;
dl.d_npartitions=0;
}
if (!dl.d_partitions[j].p_size)
continue;
if (dl.d_partitions[j].p_size +
dl.d_partitions[j].p_offset >
ds.dss_slices[i].ds_size)
continue;
sprintf(pname,"%s%c",sname,j+'a');
if (Add_Chunk(d,
dl.d_partitions[j].p_offset +
ds.dss_slices[i].ds_offset,
dl.d_partitions[j].p_size,
pname,part,
dl.d_partitions[j].p_fstype,
0) && j != 3)
warn(
"Failed to add chunk for partition %c [%lu,%lu]",
j + 'a',dl.d_partitions[j].p_offset,
dl.d_partitions[j].p_size);
}
}
}
close(fd);
@ -216,8 +233,8 @@ Clone_Disk(struct disk *d)
memcpy(d2->boot1,d->boot1,512);
}
if(d2->boot2) {
d2->boot2 = malloc(512*7);
memcpy(d2->boot2,d->boot2,512*7);
d2->boot2 = malloc(512*15);
memcpy(d2->boot2,d->boot2,512*15);
}
return d2;
}
@ -284,7 +301,7 @@ Set_Boot_Blocks(struct disk *d, u_char *b1, u_char *b2)
if(!d->boot1) err(1,"malloc failed");
memcpy(d->boot1,b1,512);
if (d->boot2) free(d->boot2);
d->boot2 = malloc(7*512);
d->boot2 = malloc(15*512);
if(!d->boot2) err(1,"malloc failed");
memcpy(d->boot2,b2,7*512);
memcpy(d->boot2,b2,15*512);
}

View File

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: libdisk.h,v 1.5 1995/04/29 07:21:11 phk Exp $
* $Id: libdisk.h,v 1.6 1995/04/30 06:09:27 phk Exp $
*
*/
@ -187,6 +187,7 @@ struct disklabel * read_disklabel(int, daddr_t);
u_short dkcksum(struct disklabel *);
struct chunk * Find_Mother_Chunk(struct chunk *, u_long , u_long , chunk_e);
struct disk * Int_Open_Disk(char *name, u_long size);
void Fixup_Names(struct disk *);
#define dprintf printf

View File

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: tst01.c,v 1.5 1995/04/29 07:21:13 phk Exp $
* $Id: tst01.c,v 1.6 1995/04/30 06:09:28 phk Exp $
*
*/
@ -24,6 +24,55 @@
CHAR_N;
u_char mbr[] = {
250,51,192,142,208,188,0,124,139,244,80,7,80,31,251,252,191,0,6,185,0,1,
242,165,234,29,6,0,0,190,190,7,179,4,128,60,128,116,14,128,60,0,117,28,
131,198,16,254,203,117,239,205,24,139,20,139,76,2,139,238,131,198,16,254,
203,116,26,128,60,0,116,244,190,139,6,172,60,0,116,11,86,187,7,0,180,14,
205,16,94,235,240,235,254,191,5,0,187,0,124,184,1,2,87,205,19,95,115,12,
51,192,205,19,79,117,237,190,163,6,235,211,190,194,6,191,254,125,129,61,
85,170,117,199,139,245,234,0,124,0,0,73,110,118,97,108,105,100,32,112,97,
114,116,105,116,105,111,110,32,116,97,98,108,101,0,69,114,114,111,114,32,
108,111,97,100,105,110,103,32,111,112,101,114,97,116,105,110,103,32,115,
121,115,116,101,109,0,77,105,115,115,105,110,103,32,111,112,101,114,97,
116,105,110,103,32,115,121,115,116,101,109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,128,
1,1,0,4,15,63,60,63,0,0,0,241,239,0,0,0,0,1,61,5,15,63,243,48,240,0,0,144,
208,2,0,0,0,1,244,165,15,63,170,192,192,3,0,144,208,2,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,85,170
};
u_char bteasy17[] = {
51,192,142,192,142,216,142,208,188,0,124,252,139,244,191,0,6,185,0,1,242,
165,234,96,6,0,0,139,213,88,162,72,7,60,53,116,28,180,16,246,228,5,174,
4,150,246,68,4,255,116,62,198,4,128,232,218,0,138,116,1,139,76,2,235,8,
232,207,0,185,1,0,50,209,187,0,124,184,1,2,205,19,114,30,129,191,254,1,
85,170,117,22,234,0,124,0,0,128,250,129,116,2,178,128,139,234,66,128,242,
179,136,22,58,7,191,190,7,185,4,0,198,6,45,7,49,50,246,136,45,138,69,4,
60,0,116,35,60,5,116,31,254,198,190,42,7,232,113,0,190,72,7,70,70,139,28,
10,255,116,5,50,125,4,117,243,141,183,114,7,232,90,0,131,199,16,254,6,45,
7,226,203,128,62,117,4,2,116,11,190,59,7,10,246,117,10,205,24,235,172,190,
42,7,232,57,0,232,54,0,50,228,205,26,139,218,131,195,96,180,1,205,22,180,
0,117,11,205,26,59,211,114,242,160,72,7,235,10,205,22,138,196,60,28,116,
243,4,246,60,49,114,214,60,53,119,210,80,190,40,7,187,27,6,83,252,172,80,
36,127,180,14,205,16,88,168,128,116,242,195,86,184,1,3,187,0,6,185,1,0,
50,246,205,19,94,198,6,72,7,63,195,13,138,13,10,70,48,32,46,32,46,32,46,
160,100,105,115,107,32,49,13,10,10,68,101,102,97,117,108,116,58,32,70,63,
160,0,1,0,4,0,6,3,7,7,10,10,99,14,100,14,101,20,128,20,129,25,130,30,147,
36,165,39,159,43,117,47,82,47,219,50,64,55,242,61,0,100,111,243,72,80,70,
211,79,115,178,85,110,105,248,78,111,118,101,108,236,77,105,110,105,248,
76,105,110,117,248,65,109,111,101,98,225,66,83,196,66,83,68,233,80,67,73,
216,67,80,205,86,101,110,105,248,68,111,115,115,101,227,63,191,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,85,170
};
int
main(int argc, char **argv)
{
@ -46,7 +95,7 @@ main(int argc, char **argv)
sprintf(myprompt,"%s %s> ",argv[0],argv[1]);
while(1) {
printf("\n\n\n\n");
printf("--==##==--\n");
Debug_Disk(d);
p = CheckRules(d);
if (p) {
@ -140,6 +189,14 @@ main(int argc, char **argv)
d = db;
continue;
}
if (!strcasecmp(*cmds,"bteasy")) {
Set_Boot_Mgr(d,bteasy17);
continue;
}
if (!strcasecmp(*cmds,"mbr")) {
Set_Boot_Mgr(d,mbr);
continue;
}
if (!strcasecmp(*cmds,"boot")) {
extern u_char boot1[],boot2[];
Set_Boot_Blocks(d,boot1,boot2);
@ -158,10 +215,13 @@ main(int argc, char **argv)
printf("\tallfreebsd\n");
printf("\tbios cyl hd sect\n");
printf("\tboot\n");
printf("\tbteasy17\n");
printf("\tcollapse [pointer]\n");
printf("\tcreate offset size enum subtype flags\n");
printf("\t\tsubtype(part): swap=1, ffs=7\n");
printf("\tdelete pointer\n");
printf("\tlist\n");
printf("\tmbr\n");
printf("\tphys cyl hd sect\n");
printf("\tquit\n");
printf("\tread [disk]\n");

View File

@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
* $Id: write_disk.c,v 1.2 1995/04/30 06:09:29 phk Exp $
* $Id: write_disk.c,v 1.3 1995/04/30 07:30:45 phk Exp $
*
*/
@ -64,6 +64,7 @@ Write_FreeBSD(int fd, struct disk *new, struct disk *old, struct chunk *c1)
}
dl->d_partitions[j].p_size = c2->size;
dl->d_partitions[j].p_offset = c2->offset - c1->offset;
dl->d_partitions[j].p_fstype = c2->subtype;
}
@ -71,10 +72,12 @@ Write_FreeBSD(int fd, struct disk *new, struct disk *old, struct chunk *c1)
strcpy(dl->d_typename,c1->name);
dl->d_secsize = 512;
dl->d_secperunit = new->chunks->size;
dl->d_secpercyl = new->real_cyl ? new->real_cyl : new->bios_cyl;
dl->d_ntracks = new->real_hd ? new->real_hd : new->bios_hd;
dl->d_nsectors = new->real_sect ? new->real_sect : new->bios_sect;
dl->d_secpercyl = dl->d_ntracks * dl->d_nsectors;
dl->d_npartitions = MAXPARTITIONS;
@ -97,7 +100,6 @@ int
Write_Extended(int fd, struct disk *new, struct disk *old, struct chunk *c1)
{
printf("--> Write_Extended()\n");
Print_Chunk(c1);
return 0;
}
@ -186,6 +188,8 @@ Write_Disk(struct disk *d1)
case foo:
dp[j].dp_typ = - c1->subtype;
break;
default:
break;
}
}
for(i=0;i<NDOSPART;i++)