diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-11-15 11:29:24 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2009-11-15 11:29:24 +0000 |
| commit | 2923682aa61504c3d43f3d0f7e515e6559c8db07 (patch) | |
| tree | b43e7e6016bcd38c52ce253ad23154415e1ea180 | |
| parent | 548585cccc7ecaa0c7bc92aa0fb4a1b553bad49f (diff) | |
2009-11-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Fixed integer potential alignment problem.
* src/bitfield.h
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | src/bitfield.h | 5 |
2 files changed, 9 insertions, 1 deletions
@@ -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])); |
