parent
0f15ab39ec
commit
d81adf1ebe
@ -6,7 +6,7 @@
|
||||
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
|
||||
* ----------------------------------------------------------------------------
|
||||
*
|
||||
* $Id: chunk.c,v 1.9 1995/05/07 01:25:22 jkh Exp $
|
||||
* $Id: chunk.c,v 1.10 1995/05/07 01:28:16 jkh Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -173,7 +173,7 @@ Insert_Chunk(struct chunk *c2, u_long offset, u_long size, char *name, chunk_e t
|
||||
}
|
||||
|
||||
int
|
||||
Add_Chunk(struct disk *d, u_long offset, u_long size, char *name, chunk_e type,
|
||||
Add_Chunk(struct disk *d, long offset, u_long size, char *name, chunk_e type,
|
||||
int subtype, u_long flags)
|
||||
{
|
||||
struct chunk *c1,*c2,ct;
|
||||
@ -264,7 +264,7 @@ Print_Chunk(struct chunk *c1,int offset)
|
||||
for(;i<offset;i++) putchar('-');
|
||||
putchar('>');
|
||||
for(;i<10;i++) putchar(' ');
|
||||
printf("%p %8lu %8lu %8lu %-8s %-8s 0x%02x ",
|
||||
printf("%p %8ld %8lu %8lu %-8s %-8s 0x%02x ",
|
||||
c1, c1->offset, c1->size, c1->end, c1->name,
|
||||
chunk_n[c1->type],c1->subtype);
|
||||
if (c1->flags & CHUNK_ALIGN) putchar('=');
|
||||
|
@ -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.16 1995/05/04 07:00:54 phk Exp $
|
||||
* $Id: disk.c,v 1.17 1995/05/06 03:28:29 phk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -53,6 +53,7 @@ Int_Open_Disk(char *name, u_long size)
|
||||
struct disk *d;
|
||||
struct dos_partition *dp;
|
||||
void *p;
|
||||
u_long offset = 0;
|
||||
|
||||
strcpy(device,"/dev/r");
|
||||
strcat(device,name);
|
||||
@ -94,8 +95,10 @@ Int_Open_Disk(char *name, u_long size)
|
||||
if (dp->dp_start+dp->dp_size >= size) continue;
|
||||
if (!dp->dp_size) continue;
|
||||
|
||||
if (dp->dp_typ == DOSPTYP_ONTRACK)
|
||||
if (dp->dp_typ == DOSPTYP_ONTRACK) {
|
||||
d->flags |= DISK_ON_TRACK;
|
||||
offset = 63;
|
||||
}
|
||||
|
||||
}
|
||||
free(p);
|
||||
@ -109,7 +112,7 @@ Int_Open_Disk(char *name, u_long size)
|
||||
if (dl.d_ntracks && dl.d_nsectors)
|
||||
d->bios_cyl = size/(dl.d_ntracks*dl.d_nsectors);
|
||||
|
||||
if (Add_Chunk(d, 0, size, name,whole,0,0))
|
||||
if (Add_Chunk(d, -offset, size, name,whole,0,0))
|
||||
warn("Failed to add 'whole' chunk");
|
||||
|
||||
for(i=BASE_SLICE;i<ds.dss_nslices;i++) {
|
||||
@ -119,6 +122,7 @@ Int_Open_Disk(char *name, u_long size)
|
||||
int subtype=0;
|
||||
if (! ds.dss_slices[i].ds_size)
|
||||
continue;
|
||||
ds.dss_slices[i].ds_offset -= offset;
|
||||
sprintf(sname,"%ss%d",name,i-1);
|
||||
subtype = ds.dss_slices[i].ds_type;
|
||||
switch (ds.dss_slices[i].ds_type) {
|
||||
@ -126,6 +130,7 @@ Int_Open_Disk(char *name, u_long size)
|
||||
ce = freebsd;
|
||||
break;
|
||||
case 0x1:
|
||||
case 0x6:
|
||||
case 0x4:
|
||||
ce = fat;
|
||||
break;
|
||||
|
@ -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.12 1995/05/04 07:00:55 phk Exp $
|
||||
* $Id: libdisk.h,v 1.13 1995/05/06 03:28:30 phk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -44,7 +44,7 @@ struct disk {
|
||||
struct chunk {
|
||||
struct chunk *next;
|
||||
struct chunk *part;
|
||||
u_long offset;
|
||||
long offset;
|
||||
u_long size;
|
||||
u_long end;
|
||||
char *name;
|
||||
@ -206,7 +206,7 @@ Prev_Track_Aligned(struct disk *d, u_long offset);
|
||||
void Debug_Chunk(struct chunk *);
|
||||
void Free_Chunk(struct chunk *);
|
||||
struct chunk * Clone_Chunk(struct chunk *);
|
||||
int Add_Chunk(struct disk *, u_long , u_long , char *, chunk_e, int , u_long);
|
||||
int Add_Chunk(struct disk *, long , u_long , char *, chunk_e, int , u_long);
|
||||
void Bios_Limit_Chunk(struct chunk *, u_long);
|
||||
void * read_block(int, daddr_t );
|
||||
void write_block(int fd, daddr_t block, void *foo);
|
||||
|
@ -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.7 1995/05/04 07:00:57 phk Exp $
|
||||
* $Id: write_disk.c,v 1.8 1995/05/06 03:28:32 phk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -64,7 +64,6 @@ 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;
|
||||
dl->d_partitions[j].p_fstype = c2->subtype;
|
||||
|
||||
}
|
||||
|
||||
dl->d_bbsize = BBSIZE;
|
||||
@ -84,6 +83,10 @@ Write_FreeBSD(int fd, struct disk *new, struct disk *old, struct chunk *c1)
|
||||
dl->d_partitions[RAW_PART].p_size = c1->size;
|
||||
dl->d_partitions[RAW_PART].p_offset = c1->offset;
|
||||
|
||||
if(new->flags & DISK_ON_TRACK)
|
||||
for(i=0;i<MAXPARTITIONS;i++)
|
||||
if (dl->d_partitions[i].p_size)
|
||||
dl->d_partitions[i].p_offset += 63;
|
||||
dl->d_magic = DISKMAGIC;
|
||||
dl->d_magic2 = DISKMAGIC;
|
||||
dl->d_checksum = dkcksum(dl);
|
||||
@ -189,9 +192,17 @@ Write_Disk(struct disk *d1)
|
||||
else
|
||||
dp[j].dp_flag = 0;
|
||||
}
|
||||
for(i=0;i<NDOSPART;i++)
|
||||
j = 0;
|
||||
for(i=0;i<NDOSPART;i++) {
|
||||
if (!s[i])
|
||||
memset(dp+i,0,sizeof *dp);
|
||||
if (dp[i].dp_flag)
|
||||
j++;
|
||||
}
|
||||
if (!j)
|
||||
for(i=0;i<NDOSPART;i++)
|
||||
if (dp[j].dp_typ == 0xa5)
|
||||
dp[i].dp_flag = 0x80;
|
||||
|
||||
mbr = read_block(fd,0);
|
||||
if (d1->bootmgr)
|
||||
|
@ -6,7 +6,7 @@
|
||||
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
|
||||
* ----------------------------------------------------------------------------
|
||||
*
|
||||
* $Id: chunk.c,v 1.9 1995/05/07 01:25:22 jkh Exp $
|
||||
* $Id: chunk.c,v 1.10 1995/05/07 01:28:16 jkh Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -173,7 +173,7 @@ Insert_Chunk(struct chunk *c2, u_long offset, u_long size, char *name, chunk_e t
|
||||
}
|
||||
|
||||
int
|
||||
Add_Chunk(struct disk *d, u_long offset, u_long size, char *name, chunk_e type,
|
||||
Add_Chunk(struct disk *d, long offset, u_long size, char *name, chunk_e type,
|
||||
int subtype, u_long flags)
|
||||
{
|
||||
struct chunk *c1,*c2,ct;
|
||||
@ -264,7 +264,7 @@ Print_Chunk(struct chunk *c1,int offset)
|
||||
for(;i<offset;i++) putchar('-');
|
||||
putchar('>');
|
||||
for(;i<10;i++) putchar(' ');
|
||||
printf("%p %8lu %8lu %8lu %-8s %-8s 0x%02x ",
|
||||
printf("%p %8ld %8lu %8lu %-8s %-8s 0x%02x ",
|
||||
c1, c1->offset, c1->size, c1->end, c1->name,
|
||||
chunk_n[c1->type],c1->subtype);
|
||||
if (c1->flags & CHUNK_ALIGN) putchar('=');
|
||||
|
@ -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.16 1995/05/04 07:00:54 phk Exp $
|
||||
* $Id: disk.c,v 1.17 1995/05/06 03:28:29 phk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -53,6 +53,7 @@ Int_Open_Disk(char *name, u_long size)
|
||||
struct disk *d;
|
||||
struct dos_partition *dp;
|
||||
void *p;
|
||||
u_long offset = 0;
|
||||
|
||||
strcpy(device,"/dev/r");
|
||||
strcat(device,name);
|
||||
@ -94,8 +95,10 @@ Int_Open_Disk(char *name, u_long size)
|
||||
if (dp->dp_start+dp->dp_size >= size) continue;
|
||||
if (!dp->dp_size) continue;
|
||||
|
||||
if (dp->dp_typ == DOSPTYP_ONTRACK)
|
||||
if (dp->dp_typ == DOSPTYP_ONTRACK) {
|
||||
d->flags |= DISK_ON_TRACK;
|
||||
offset = 63;
|
||||
}
|
||||
|
||||
}
|
||||
free(p);
|
||||
@ -109,7 +112,7 @@ Int_Open_Disk(char *name, u_long size)
|
||||
if (dl.d_ntracks && dl.d_nsectors)
|
||||
d->bios_cyl = size/(dl.d_ntracks*dl.d_nsectors);
|
||||
|
||||
if (Add_Chunk(d, 0, size, name,whole,0,0))
|
||||
if (Add_Chunk(d, -offset, size, name,whole,0,0))
|
||||
warn("Failed to add 'whole' chunk");
|
||||
|
||||
for(i=BASE_SLICE;i<ds.dss_nslices;i++) {
|
||||
@ -119,6 +122,7 @@ Int_Open_Disk(char *name, u_long size)
|
||||
int subtype=0;
|
||||
if (! ds.dss_slices[i].ds_size)
|
||||
continue;
|
||||
ds.dss_slices[i].ds_offset -= offset;
|
||||
sprintf(sname,"%ss%d",name,i-1);
|
||||
subtype = ds.dss_slices[i].ds_type;
|
||||
switch (ds.dss_slices[i].ds_type) {
|
||||
@ -126,6 +130,7 @@ Int_Open_Disk(char *name, u_long size)
|
||||
ce = freebsd;
|
||||
break;
|
||||
case 0x1:
|
||||
case 0x6:
|
||||
case 0x4:
|
||||
ce = fat;
|
||||
break;
|
||||
|
@ -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.12 1995/05/04 07:00:55 phk Exp $
|
||||
* $Id: libdisk.h,v 1.13 1995/05/06 03:28:30 phk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -44,7 +44,7 @@ struct disk {
|
||||
struct chunk {
|
||||
struct chunk *next;
|
||||
struct chunk *part;
|
||||
u_long offset;
|
||||
long offset;
|
||||
u_long size;
|
||||
u_long end;
|
||||
char *name;
|
||||
@ -206,7 +206,7 @@ Prev_Track_Aligned(struct disk *d, u_long offset);
|
||||
void Debug_Chunk(struct chunk *);
|
||||
void Free_Chunk(struct chunk *);
|
||||
struct chunk * Clone_Chunk(struct chunk *);
|
||||
int Add_Chunk(struct disk *, u_long , u_long , char *, chunk_e, int , u_long);
|
||||
int Add_Chunk(struct disk *, long , u_long , char *, chunk_e, int , u_long);
|
||||
void Bios_Limit_Chunk(struct chunk *, u_long);
|
||||
void * read_block(int, daddr_t );
|
||||
void write_block(int fd, daddr_t block, void *foo);
|
||||
|
@ -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.7 1995/05/04 07:00:57 phk Exp $
|
||||
* $Id: write_disk.c,v 1.8 1995/05/06 03:28:32 phk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -64,7 +64,6 @@ 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;
|
||||
dl->d_partitions[j].p_fstype = c2->subtype;
|
||||
|
||||
}
|
||||
|
||||
dl->d_bbsize = BBSIZE;
|
||||
@ -84,6 +83,10 @@ Write_FreeBSD(int fd, struct disk *new, struct disk *old, struct chunk *c1)
|
||||
dl->d_partitions[RAW_PART].p_size = c1->size;
|
||||
dl->d_partitions[RAW_PART].p_offset = c1->offset;
|
||||
|
||||
if(new->flags & DISK_ON_TRACK)
|
||||
for(i=0;i<MAXPARTITIONS;i++)
|
||||
if (dl->d_partitions[i].p_size)
|
||||
dl->d_partitions[i].p_offset += 63;
|
||||
dl->d_magic = DISKMAGIC;
|
||||
dl->d_magic2 = DISKMAGIC;
|
||||
dl->d_checksum = dkcksum(dl);
|
||||
@ -189,9 +192,17 @@ Write_Disk(struct disk *d1)
|
||||
else
|
||||
dp[j].dp_flag = 0;
|
||||
}
|
||||
for(i=0;i<NDOSPART;i++)
|
||||
j = 0;
|
||||
for(i=0;i<NDOSPART;i++) {
|
||||
if (!s[i])
|
||||
memset(dp+i,0,sizeof *dp);
|
||||
if (dp[i].dp_flag)
|
||||
j++;
|
||||
}
|
||||
if (!j)
|
||||
for(i=0;i<NDOSPART;i++)
|
||||
if (dp[j].dp_typ == 0xa5)
|
||||
dp[i].dp_flag = 0x80;
|
||||
|
||||
mbr = read_block(fd,0);
|
||||
if (d1->bootmgr)
|
||||
|
Loading…
Reference in New Issue
Block a user