More support for Alpha installs.
Submitted by: dfr
This commit is contained in:
parent
50895b8915
commit
35ea9462db
@ -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.38 1998/10/06 11:57:08 dfr Exp $
|
||||
* $Id: disk.c,v 1.39 1998/12/19 18:48:33 phk Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -143,6 +143,7 @@ Int_Open_Disk(const char *name, u_long size)
|
||||
{}
|
||||
#endif
|
||||
|
||||
#ifdef __i386__
|
||||
for(i=BASE_SLICE;i<ds.dss_nslices;i++) {
|
||||
char sname[20];
|
||||
chunk_e ce;
|
||||
@ -241,6 +242,67 @@ Int_Open_Disk(const char *name, u_long size)
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* __i386__ */
|
||||
#ifdef __alpha__
|
||||
{
|
||||
struct disklabel dl;
|
||||
char pname[20];
|
||||
int j,k;
|
||||
|
||||
strcpy(pname,"/dev/r");
|
||||
strcat(pname,name);
|
||||
j = open(pname,O_RDONLY);
|
||||
if (j < 0) {
|
||||
#ifdef DEBUG
|
||||
warn("open(%s)",pname);
|
||||
#endif
|
||||
goto nolabel;
|
||||
}
|
||||
k = ioctl(j,DIOCGDINFO,&dl);
|
||||
if (k < 0) {
|
||||
#ifdef DEBUG
|
||||
warn("ioctl(%s,DIOCGDINFO)",pname);
|
||||
#endif
|
||||
close(j);
|
||||
goto nolabel;
|
||||
}
|
||||
close(j);
|
||||
All_FreeBSD(d, 1);
|
||||
|
||||
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[WHOLE_DISK_SLICE].ds_size)
|
||||
continue;
|
||||
sprintf(pname,"%s%c",name,j+'a');
|
||||
if (Add_Chunk(d,
|
||||
dl.d_partitions[j].p_offset,
|
||||
dl.d_partitions[j].p_size,
|
||||
pname,part,
|
||||
dl.d_partitions[j].p_fstype,
|
||||
0) && j != 3)
|
||||
#ifdef DEBUG
|
||||
warn(
|
||||
"Failed to add chunk for partition %c [%lu,%lu]",
|
||||
j + 'a',dl.d_partitions[j].p_offset,
|
||||
dl.d_partitions[j].p_size);
|
||||
#else
|
||||
{}
|
||||
#endif
|
||||
}
|
||||
nolabel:;
|
||||
}
|
||||
#endif /* __alpha__ */
|
||||
close(fd);
|
||||
Fixup_Names(d);
|
||||
Bios_Limit_Chunk(d->chunks,1024*d->bios_hd*d->bios_sect);
|
||||
|
@ -6,7 +6,7 @@
|
||||
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
|
||||
* ----------------------------------------------------------------------------
|
||||
*
|
||||
* $Id$
|
||||
* $Id: tst01.c,v 1.21 1997/02/22 15:06:39 peter Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -252,10 +252,12 @@ main(int argc, char **argv)
|
||||
Set_Boot_Mgr(d,mbr);
|
||||
continue;
|
||||
}
|
||||
#ifndef __alpha__ /* don't think this compiles on i386 either */
|
||||
if (!strcasecmp(*cmds,"boot")) {
|
||||
Set_Boot_Blocks(d,boot1,boot2);
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
if (!strcasecmp(*cmds,"write")) {
|
||||
printf("Write=%d\n",
|
||||
Write_Disk(d));
|
||||
|
@ -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.24 1998/10/27 21:14:03 msmith Exp $
|
||||
* $Id: write_disk.c,v 1.25 1999/01/08 00:32:19 jkh Exp $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -64,7 +64,11 @@ Write_FreeBSD(int fd, struct disk *new, struct disk *old, struct chunk *c1)
|
||||
for(c2=c1->part;c2;c2=c2->next) {
|
||||
if (c2->type == unused) continue;
|
||||
if (!strcmp(c2->name,"X")) continue;
|
||||
#ifdef __alpha__
|
||||
j = c2->name[strlen(c2->name) - 1] - 'a';
|
||||
#else
|
||||
j = c2->name[strlen(new->name) + 2] - 'a';
|
||||
#endif
|
||||
if (j < 0 || j >= MAXPARTITIONS || j == RAW_PART) {
|
||||
#ifdef DEBUG
|
||||
warn("Weird parititon letter %c",c2->name[strlen(new->name) + 2]);
|
||||
@ -180,16 +184,19 @@ Write_Disk(struct disk *d1)
|
||||
for (c1=d1->chunks->part; c1 ; c1 = c1->next) {
|
||||
if (c1->type == unused) continue;
|
||||
if (!strcmp(c1->name,"X")) continue;
|
||||
#ifndef __alpha__
|
||||
j = c1->name[4] - '1';
|
||||
j = c1->name[strlen(d1->name) + 1] - '1';
|
||||
if (j < 0 || j > 3)
|
||||
continue;
|
||||
s[j]++;
|
||||
#endif
|
||||
if (c1->type == extended)
|
||||
ret += Write_Extended(fd, d1,old,c1);
|
||||
if (c1->type == freebsd)
|
||||
ret += Write_FreeBSD(fd, d1,old,c1);
|
||||
|
||||
#ifndef __alpha__
|
||||
Write_Int32(&dp[j].dp_start, c1->offset);
|
||||
Write_Int32(&dp[j].dp_size, c1->size);
|
||||
|
||||
@ -237,7 +244,9 @@ Write_Disk(struct disk *d1)
|
||||
dp[j].dp_flag = 0x80;
|
||||
else
|
||||
dp[j].dp_flag = 0;
|
||||
#endif
|
||||
}
|
||||
#ifndef __alpha__
|
||||
j = 0;
|
||||
for(i=0;i<NDOSPART;i++) {
|
||||
if (!s[i])
|
||||
@ -250,7 +259,6 @@ Write_Disk(struct disk *d1)
|
||||
if (dp[i].dp_typ == 0xa5)
|
||||
dp[i].dp_flag = 0x80;
|
||||
|
||||
#ifndef __alpha__
|
||||
mbr = read_block(fd,WHERE(0,d1));
|
||||
if (d1->bootmgr)
|
||||
memcpy(mbr,d1->bootmgr,DOSPARTOFF);
|
||||
|
Loading…
x
Reference in New Issue
Block a user