diff options
author | Roman Divacky <rdivacky@FreeBSD.org> | 2012-08-27 14:51:26 +0000 |
---|---|---|
committer | Roman Divacky <rdivacky@FreeBSD.org> | 2012-08-27 14:51:26 +0000 |
commit | b1fcaf5f95107aebf2ec6152633460399f11808d (patch) | |
tree | 1838d93cce9d3d29b1c1695f8816b75b0c85d8cd /usr.sbin/nvram | |
parent | ae7f84a9a4c211d9285dd608ae190cd91aaa1d2a (diff) | |
download | src-b1fcaf5f95107aebf2ec6152633460399f11808d.tar.gz src-b1fcaf5f95107aebf2ec6152633460399f11808d.zip |
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
Notes
Notes:
svn path=/head/; revision=239733
Diffstat (limited to 'usr.sbin/nvram')
-rw-r--r-- | usr.sbin/nvram/nvram.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/usr.sbin/nvram/nvram.c b/usr.sbin/nvram/nvram.c index 9d56f9d537b1..a286ee3e60ea 100644 --- a/usr.sbin/nvram/nvram.c +++ b/usr.sbin/nvram/nvram.c @@ -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)) |