summaryrefslogtreecommitdiff
path: root/lib/libdisk/write_disk.c
diff options
context:
space:
mode:
authorDoug Rabson <dfr@FreeBSD.org>1998-10-06 11:57:08 +0000
committerDoug Rabson <dfr@FreeBSD.org>1998-10-06 11:57:08 +0000
commit5b4c313702ac6a5b1255501b657cb4432b1a5bf2 (patch)
tree39d6d30b7d6aea464cb8952a9863f0760dcfe320 /lib/libdisk/write_disk.c
parenta20d77550a297e58ff54e3ab3c3dae489ce92eed (diff)
Notes
Diffstat (limited to 'lib/libdisk/write_disk.c')
-rw-r--r--lib/libdisk/write_disk.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/libdisk/write_disk.c b/lib/libdisk/write_disk.c
index cf7e87a2e297..6d3b2a7d1d1c 100644
--- a/lib/libdisk/write_disk.c
+++ b/lib/libdisk/write_disk.c
@@ -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.21 1998/06/27 02:01:25 jdp Exp $
+ * $Id: write_disk.c,v 1.22 1998/09/30 21:40:51 jkh Exp $
*
*/
@@ -38,17 +38,25 @@ Write_FreeBSD(int fd, struct disk *new, struct disk *old, struct chunk *c1)
int i,j;
void *p;
u_char buf[BBSIZE];
+#ifdef __alpha__
+ u_long *lp, sum;
+#endif
for(i=0;i<BBSIZE/512;i++) {
p = read_block(fd,WHERE(i + c1->offset,new));
memcpy(buf+512*i,p,512);
free(p);
}
+#if defined(__i386__)
if(new->boot1)
memcpy(buf,new->boot1,512);
if(new->boot2)
memcpy(buf+512,new->boot2,BBSIZE-512);
+#elif defined(__alpha__)
+ if(new->boot1)
+ memcpy(buf+512,new->boot1,BBSIZE-512);
+#endif
dl = (struct disklabel *) (buf+512*LABELSECTOR+LABELOFFSET);
memset(dl,0,sizeof *dl);
@@ -100,6 +108,15 @@ Write_FreeBSD(int fd, struct disk *new, struct disk *old, struct chunk *c1)
dl->d_magic2 = DISKMAGIC;
dl->d_checksum = dkcksum(dl);
+#ifdef __alpha__
+ /*
+ * Generate the bootblock checksum for the SRM console.
+ */
+ for (lp = (u_long *)buf, i = 0, sum = 0; i < 63; i++)
+ sum += lp[i];
+ lp[63] = sum;
+#endif
+
for(i=0;i<BBSIZE/512;i++) {
write_block(fd,WHERE(i + c1->offset,new),buf+512*i);
}