Source-Changes-D archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: CVS commit: src/sys/arch/atari/stand/installboot



riastradh@ wrote:

> As is, there are obviously violations, but we have papered over them
> enough that GCC isn't smart enough to warn about them: the void * cast
> through abcksum

I'd like to hear your answer of my dumb question:
http://mail-index.netbsd.org/source-changes-d/2014/11/16/msg007354.html
>> Then why don't you guys also complain to fix existing abcksum() function
>> which is called at the suggested memcpy?

If you think the existing abcksum() is vaild, does this one
(adding a function which does the same as abcksum) satisfy you?
Or is it still better to revert all changes and put -fno-strict-aliasing?

--- installboot.c.orig	2014-11-16 22:38:39.000000000 +0900
+++ installboot.c	2014-11-22 23:40:36.000000000 +0900
@@ -56,6 +56,7 @@
 static void	usage(void);
 static void	oscheck(void);
 static u_int	abcksum(void *);
+static void	setabcksum(void *, u_int16_t);
 static void	setNVpref(void);
 static void	setIDEpar(u_int8_t *, size_t);
 static void	mkahdiboot(struct ahdi_root *, char *,
@@ -467,6 +468,7 @@
     struct disklabel *label, u_int magic)
 {
 	int		 fd;
+	u_int16_t cksum;
 
 	memset(bb, 0, sizeof(*bb));
 
@@ -498,8 +500,9 @@
 	setIDEpar(bb->bb_xxboot, sizeof(bb->bb_xxboot));
 
 	/* set AHDI checksum */
-	*((u_int16_t *)bb->bb_xxboot + 255) = 0;
-	*((u_int16_t *)bb->bb_xxboot + 255) = 0x1234 - abcksum(bb->bb_xxboot);
+	setabcksum(bb->bb_xxboot, 0);
+	cksum = 0x1234 - abcksum(bb->bb_xxboot);
+	setabcksum(bb->bb_xxboot, cksum);
 
 	if (verbose) {
 		printf("Primary   boot loader: %s\n", xxb);
@@ -582,3 +585,11 @@
 		sum += *st++;
 	return(sum);
 }
+
+static void
+setabcksum(void *bs, u_int16_t sum)
+{
+	u_int16_t *cksum = (u_int16_t *)bs + 255;
+
+	*cksum = sum;
+}

---
Izumi Tsutsui


Home | Main Index | Thread Index | Old Index