Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 27 Aug 2012 14:51:26 +0000 (UTC)
From:      Roman Divacky <rdivacky@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r239733 - head/usr.sbin/nvram
Message-ID:  <201208271451.q7REpQ6W013159@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: rdivacky
Date: Mon Aug 27 14:51:26 2012
New Revision: 239733
URL: http://svn.freebsd.org/changeset/base/239733

Log:
  Dont cast from char* to struct chrp_header* which has a bigger alignment
  requirements. Copy it via union instead. Fixes a clang warning about
  alignment.
  
  Reviewed by:    sobomax

Modified:
  head/usr.sbin/nvram/nvram.c

Modified: head/usr.sbin/nvram/nvram.c
==============================================================================
--- head/usr.sbin/nvram/nvram.c	Mon Aug 27 14:44:40 2012	(r239732)
+++ head/usr.sbin/nvram/nvram.c	Mon Aug 27 14:51:26 2012	(r239733)
@@ -51,12 +51,16 @@ struct deletelist {
 	struct deletelist *last;
 };
 
+union {
+	uint8_t buf[sizeof(struct chrp_header)];
+	struct chrp_header header;
+} conv;
+
 int
 main(int argc, char **argv)
 {
 	int opt, dump, fd, res, i, size;
 	uint8_t buf[NVRAM_SIZE], *cp, *common;
-	struct chrp_header *header;
 	struct deletelist *dl;
 
 	dump = 0;
@@ -116,9 +120,9 @@ main(int argc, char **argv)
 	/* Locate common block */
 	size = 0;
 	for (cp = buf; cp < buf + sizeof(buf); cp += size) {
-		header = (struct chrp_header *)cp;
-		size = header->length * 0x10;
-		if (strncmp(header->name, "common", 7) == 0)
+		memcpy(conv.buf, cp, sizeof(struct chrp_header));
+		size = conv.header.length * 0x10;
+		if (strncmp(conv.header.name, "common", 7) == 0)
 			break;
 	}
 	if (cp >= buf + sizeof(buf) || size <= (int)sizeof(struct chrp_header))



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201208271451.q7REpQ6W013159>