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



On Nov 24,  2:28am, tsutsui%ceres.dti.ne.jp@localhost (Izumi Tsutsui) wrote:
-- Subject: Re: CVS commit: src/sys/arch/atari/stand/installboot

| christos@ wrote:
| 
| > |  http://mail-index.netbsd.org/source-changes-d/2014/11/15/msg007338.html
| > 
| > I could not have tested; I asked you to test.
| 
| I didn't tested it either.
| I noticed your obvious wrong pointer calculation by code inspection,
| and it means memcpy() would confuse future maintainers "which address
| should be used for the cksum."
| 
| > | If you still don't like it, please propose a patch which satisfies
| > | both requests as martin said, not repeating your "memcpy is ok and
| > | -fstrict-aliasing is more important" claim.
| > 
| > I did not propose that one but the be16enc() solution someone else
| > presented seems more natural (and will work on LE machines).
| 
| You still don't understand my point:
| "to use u_int16_t assignment consistently."
| be16enc() is a bit better them memcpy(), but not ok for me.
| 
| memcpy() and be16enc() are functions to access stream buffers.
| The cksum should be an element of u_int16_t array, not part of stream
| in this case.

How about this then,

christos

Index: installboot.c
===================================================================
RCS file: /cvsroot/src/sys/arch/atari/stand/installboot/installboot.c,v
retrieving revision 1.28
diff -u -u -r1.28 installboot.c
--- installboot.c	31 Mar 2014 06:32:31 -0000	1.28
+++ installboot.c	23 Nov 2014 18:16:05 -0000
@@ -55,7 +55,7 @@
 
 static void	usage(void);
 static void	oscheck(void);
-static u_int	abcksum(void *);
+static void	abcksum(void *);
 static void	setNVpref(void);
 static void	setIDEpar(u_int8_t *, size_t);
 static void	mkahdiboot(struct ahdi_root *, char *,
@@ -455,8 +455,7 @@
 
 gotit:	/* copy code from prototype and set new checksum */
 	memcpy(newroot->ar_fill, tmproot.ar_fill, sizeof(tmproot.ar_fill));
-	newroot->ar_checksum = 0;
-	newroot->ar_checksum = 0x1234 - abcksum(newroot);
+	abcksum(newroot);
 
 	if (verbose)
 		printf("AHDI      boot loader: %s\n", xxb00t);
@@ -498,8 +497,7 @@
 	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);
+	abcksum(bb->bb_xxboot);
 
 	if (verbose) {
 		printf("Primary   boot loader: %s\n", xxb);
@@ -571,14 +569,14 @@
 	}
 }
 
-static u_int
-abcksum (void *bs)
+static void
+abcksum(void *bs)
 {
 	u_int16_t sum  = 0,
 		  *st  = (u_int16_t *)bs,
-		  *end = (u_int16_t *)bs + 256;
+		  *end = (u_int16_t *)bs + 255;
 
 	while (st < end)
 		sum += *st++;
-	return(sum);
+	*st++ = 0x1234 - sum;
 }



Home | Main Index | Thread Index | Old Index