summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-11-15 11:29:24 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2009-11-15 11:29:24 +0000
commit2923682aa61504c3d43f3d0f7e515e6559c8db07 (patch)
treeb43e7e6016bcd38c52ce253ad23154415e1ea180
parent548585cccc7ecaa0c7bc92aa0fb4a1b553bad49f (diff)
2009-11-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed integer potential alignment problem. * src/bitfield.h
-rw-r--r--ChangeLog5
-rw-r--r--src/bitfield.h5
2 files changed, 9 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 0552cdbe..e005ad19 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,10 @@
2009-11-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
+ Fixed integer potential alignment problem.
+ * src/bitfield.h
+
+2009-11-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
+
Applied a patch from tizianomueller to fix sigbus errors on Linux
sparc. I modified the patch to eliminate a cast to uint32_t* and
include file ordering.
diff --git a/src/bitfield.h b/src/bitfield.h
index 38d3b0a7..869010de 100644
--- a/src/bitfield.h
+++ b/src/bitfield.h
@@ -39,6 +39,7 @@
#include <cassert>
#include <cstdlib>
+#include <cstring>
#include "util.h"
@@ -105,7 +106,9 @@ inline size_t countSetBit(const unsigned char* bitfield, size_t nbits)
}
size_t to = len/size;
for(size_t i = 0; i < to; ++i) {
- count += countBit32(*reinterpret_cast<const uint32_t*>(&bitfield[i*size]));
+ uint32_t v;
+ memcpy(&v, &bitfield[i*size], sizeof(v));
+ count += countBit32(v);
}
for(size_t i = len-len%size; i < len; ++i) {
count += countBit32(static_cast<uint32_t>(bitfield[i]));